Java Hibernate无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

时间:2020-07-03 19:42:21

标签: java hibernate jsoup

编译代码时,该代码使用jsoup从网站获取数据并保存到mysql数据库中。在添加约450个元素后,它崩溃并给出 Output ,链接的值被正确地写入和读取。一切都在代码中,我也正在使用mysql8。

以下是persistence.xml的休眠元素:

输出

WARN: HHH000342: Could not obtain connection to query metadata : null
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:116)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionCreator.makeConnection(DriverManagerConnectionCreator.java:37)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:331)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:250)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:228)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:369)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:98)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at info.adam.jpa.domain.House.addHouse(House.java:19)
    at info.adam.jpa.classes.HouseScraper.OlxHouseScraper(HouseScraper.java:80)
    at info.adam.jpa.classes.MainMenu.Menu(MainMenu.java:18)
    at info.adam.jpa.Main.main(Main.java:20)
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
    ... 40 more

以下是最重要的类的代码:

主要

    public static EntityManagerFactory entityManagerFactory;
    public static EntityManager entityManager;

    public static void main(String[] args) throws IOException {
        entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
        entityManager = entityManagerFactory.createEntityManager();
        MainMenu.Menu();
        
        entityManager.close();
        entityManagerFactory.close();

    }

}

MainMenu

public class MainMenu {
    public static void Menu() throws IOException {
        System.out.println("Enter number to: "
                + "\n1.Refresh the property offers"
                + "\n2.Show the data"
                + "\n3.Show daily, weekly, monthly percentage change");
        
        Scanner scan = new Scanner(System.in);
        int chosenNumberInMenu = scan.nextInt();

        switch (chosenNumberInMenu) {
        case 1:
            HouseScraper.OlxHouseScraper();
        case 2:
        
        case 3:
        }
        
        
    }
}

HouseScraper

public class HouseScraper {

    public static void OlxHouseScraper() throws IOException {
        Document doc = Jsoup
                .connect("https://www.olx.pl/nieruchomosci/domy/malopolskie/?search[filter_float_price%3Afrom]=35000")
                .get();
        String numberOfPages = doc.select(".lheight24.tdnone.large.brc8.br3.block").text();
        String[] numbersOfPages = numberOfPages.split(" ");
        String lastPage = numbersOfPages[12];
        int intLastPage = Integer.parseInt(lastPage);
        for (int i = 1; i <= intLastPage; i++) {
            StringBuilder urlOfPage = new StringBuilder();
            urlOfPage.append(
                    "https://www.olx.pl/nieruchomosci/domy/malopolskie/?search[filter_float_price%3Afrom]=35000&page=");
            urlOfPage.append(i);
            String url = urlOfPage.toString();
            System.out.println(url);
            Document document = Jsoup.connect(url).get();
            for (Element row : document.select("a.detailsLink.linkWithHash.link.marginright5")) {
                String urlToOffer = row.attr("href");
                Document linkToOffer = Jsoup.connect(urlToOffer).get();
                if (urlToOffer.contains("otodom.pl")) {
                    
                    // name
                    String name = linkToOffer.select(".css-1ld8fwi").text();
                    System.out.print(name + " ");

                    // price
                    String offerPrice = linkToOffer.select("div.css-1vr19r7").text();
                    String replaceString = offerPrice.replace("zł", "");
                    replaceString = replaceString.replace(" ", "");
                    replaceString = replaceString.replace("€", "");
                    replaceString = replaceString.replace(',', '.');
                    float price = Float.valueOf(replaceString);
                    System.out.print(price + " ");

                    // location
                    String location = linkToOffer.select("a.css-12hd9gg").text();
                    System.out.print(location);
                    System.out.println(" ");
                    House.addHouse(name, location, price, "otodom");

                } else if (urlToOffer.contains("olx.pl")) {

                    // Name
                    String name = linkToOffer.select("h1").text();
                    System.out.print(name + " ");

                    // price
                    int finalPrice;
                    try {
                        String offerPrice = linkToOffer.select(".not-arranged.pricelabel__value").text();
                        String replaceString = offerPrice.replace("zł", "");
                        replaceString = replaceString.replace(" ", "");
                        replaceString = replaceString.replace("€", "");
                        replaceString = replaceString.replace(',', '.');
                        float price = Float.valueOf(replaceString);
                        finalPrice = (int) price;
                        System.out.print(finalPrice + " ");
                    } catch (Exception e) {
                        finalPrice = 0;
                    }

                    // Location
                    String location = linkToOffer.select("address").text();
                    System.out.print(location);
                    System.out.println(" ");
                    if (finalPrice != 0) {
                        House.addHouse(name, location, finalPrice, "olx");
                    }

                }
            
            }

        }
    }


**House**
@Entity
public class House extends Property {
    
    
    
    public static EntityManagerFactory entityManagerFactory;
    public static EntityManager entityManager;

    public static void addHouse(String name, String location,float price, String link) {
        entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
        entityManager = entityManagerFactory.createEntityManager();
        
        House house = new House();

    
        house.setName(name);
        house.setLocation(location);
        house.setPrice(price);
        house.setLink(link);
        
        entityManager.getTransaction().begin();
        entityManager.persist(house);
        entityManager.getTransaction().commit();

    }
}


I know its not the best looking code, but im learning and open to criticism and advices!

0 个答案:

没有答案