Cześć!
Kombinuję już nad tym dobre kilka godzin i obawiam się, że prędzej osiwieję niż uda mi się rozwiązać ten problem ssamodzielnie. W internecie są podobne tematy, ale żaden nie pomógł.
Otóż mam prosty do bólu projekt Maven. Chce się połączyć z bazą danych przez JPA.
W funkcji main, klasy TestSystem.java mam:
private static final EntityManagerFactory EMF = Persistence
.createEntityManagerFactory("word");
Wszystkie biblioteki zaimportowane. Tak wygląda struktura projektu:
https://www.dropbox.com/s/ci9codpafzr25qp/Zrzut%20ekranu%202019-04-05%2004.02.18.png?dl=0
Podczas próby debugowania otrzymuję taki błąd:
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:62613,suspend=y,server=n -javaagent:C:\Users\Specyk\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_191\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar;C:\Users\Specyk\Desktop\talking-flashcards\out\production\talking-flashcards;C:\Users\Specyk\Desktop\talking-flashcards\lib\classmate-1.3.4.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\antlr-2.7.7.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\dom4j-2.1.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\FastInfoset-1.2.15.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\istack-commons-runtime-3.0.7.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jandex-2.0.5.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javax.activation-api-1.2.0.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javassist-3.24.0-GA.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\byte-buddy-1.9.5.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javax.persistence-api-2.2.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jaxb-api-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jboss-logging-3.3.2.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\stax-ex-1.8.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\txw2-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jaxb-runtime-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\hibernate-core-5.4.1.Final.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar" com.TestSystem
Connected to the target VM, address: '127.0.0.1:62613', transport: 'socket'
kwi 05, 2019 3:58:38 AM org.hibernate.jpa.boot.internal.PersistenceXmlParser doResolve
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
java.lang.ExceptionInInitializerError
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named word
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at com.TestSystem.<clinit>(TestSystem.java:15)
Disconnected from the target VM, address: '127.0.0.1:62613', transport: 'socket'
Exception in thread "main"
Process finished with exit code 1
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tf</groupId>
<artifactId>talking-flashcards</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.1.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="word" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.Word</class>
<properties>
<property name="javax.persistance.jdbc.driver"
value = "com.mysql.jdbc.Driver" />
<property name="javax.persistance.jdbc.url"
value = "jdbc:mysql://localhost/wordspeaker" />
<property name="javax.persistance.jdbc.user"
value = "root" />
<property name="javax.persistance.jdbc.password"
value = "" />
</properties>
</persistence-unit>
</persistence>
W akcie desperacji skopiowałem folder META-INF (wraz z zawartością) i wrzuciłem dosłownie do każdego możliwego folderu w projekcie. Wtedy błąd zmienił się nieco zmienił:
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63333,suspend=y,server=n -javaagent:C:\Users\Specyk\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_191\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar;C:\Users\Specyk\Desktop\talking-flashcards\out\production\talking-flashcards;C:\tomcat\lib\jsp-api.jar;C:\tomcat\lib\servlet-api.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\classmate-1.3.4.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\antlr-2.7.7.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\dom4j-2.1.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\FastInfoset-1.2.15.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\istack-commons-runtime-3.0.7.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jandex-2.0.5.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javax.activation-api-1.2.0.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javassist-3.24.0-GA.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\byte-buddy-1.9.5.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\javax.persistence-api-2.2.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jaxb-api-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jboss-logging-3.3.2.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\stax-ex-1.8.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\txw2-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\jaxb-runtime-2.3.1.jar;C:\Users\Specyk\Desktop\talking-flashcards\lib\hibernate-core-5.4.1.Final.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar" com.TestSystem
Connected to the target VM, address: '127.0.0.1:63333', transport: 'socket'
kwi 05, 2019 4:09:04 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: word]
kwi 05, 2019 4:09:04 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.1.Final}
kwi 05, 2019 4:09:05 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
kwi 05, 2019 4:09:05 AM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
kwi 05, 2019 4:09:05 AM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
java.lang.ExceptionInInitializerError
Caused by: 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.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:903)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:934)
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 com.TestSystem.<clinit>(TestSystem.java:15)
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)
... 14 more
Disconnected from the target VM, address: '127.0.0.1:63333', transport: 'socket'
Exception in thread "main"
Process finished with exit code 1
Zaznaczam, że baza danych działa na 100%, jej nazwa to wordspeaker i dane się zgadzają.
Ktoś ma jakiś pomysł? Pewnie chodzi o jakąś bzdurę, a ja nie mogę ruszyć przez to ani kawałek dalej z moim projektem :/.
EDIT:
W IntelliJ IDEA, w ustawieniach projektu > JPA dodałem ścieżkę do persistence.xml.
Javą zajmuję się od niedawna, nie wiem czy problem może leżeć w konfiguracji programu? I jak to jest, gdy debuguję sobie dowolną klasę w danym projekcie z funkcją main, to rozumiem że dzięki zaimportowanym bibliotekom każda funkcja dotrze do plików konfiguracyjnych typu persistence.xml tak?