Java JPA - problem z połączeniem z bazą

0

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?

0

W persistence.xml

  1. Określ dialekt:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
  1. Sprawdź czy port na którym słucha MySQL jest domyślny czy jakiś inny. Jeśli nie jest to port domyślny, to jawnie podaj:
 <property name="javax.persistance.jdbc.url"  value = "jdbc:mysql://localhost:<PORT>/wordspeaker" />

edycja:
persistence.xml trzymasz w resources/META-INF, więc katalog resources powinien być dodany do CLASSPATHA, tak żeby fabryka Ci go widziała.

0

Dodałem resources do CLAASPATH i teraz wygląda, że znajduje persistence.xml. Ustawiłem też dialekt, port serwera MySQL jest domyślny, ale na wszelki wypadek podałem manualnie port. Obecnie dostaję taki błąd:

"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:57164,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:\Users\Specyk\Desktop\talking-flashcards\resources;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar" com.TestSystem
Connected to the target VM, address: '127.0.0.1:57164', transport: 'socket'
kwi 05, 2019 2:05:27 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: word]
kwi 05, 2019 2:05:27 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.1.Final}
kwi 05, 2019 2:05:28 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
kwi 05, 2019 2:05:28 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
kwi 05, 2019 2:05:28 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
kwi 05, 2019 2:05:28 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
kwi 05, 2019 2:05:29 PM org.hibernate.tuple.PojoInstantiator <init>
INFO: HHH000182: No default (no-argument) constructor for class: com.Word (class must be instantiated by Interceptor)
kwi 05, 2019 2:05:29 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: word is not mapped [SELECT c FROM word c WHERE c.id IS NOT NULL]
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
	at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:713)
	at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:729)
	at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)
	at com.TestSystem.getWords(TestSystem.java:56)
	at com.TestSystem.main(TestSystem.java:20)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: word is not mapped [SELECT c FROM word c WHERE c.id IS NOT NULL]
	at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
	at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:118)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:78)
	at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:158)
	at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:595)
	at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:704)
	... 4 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: word is not mapped
	at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:169)
	at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
	at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:79)
	at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3695)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3584)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:720)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:576)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:313)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:261)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:272)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192)
	... 10 more
Disconnected from the target VM, address: '127.0.0.1:57164', transport: 'socket'

Process finished with exit code 1

Wydaje mi się, że wszystko jest poprawnie zmapowane.
Word.java

package com;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "word")
public class Word implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id", unique = true)
    private int id;

    @Column(name = "word", nullable = false)
    private String word;

    @Column(name = "translation", nullable = false)
    private String translation;

    @Column(name = "explanation", nullable = false)
    private String explanation;

    public int getId() {
        return id;
    }

    void setId(int id) {
        this.id = id;
    }

    public String getWord() {
        return word;
    }

    Word(int id, String word, String translation, String explanation){
        this.id = id;
        this.word = word;
        this.translation = translation;
        this.explanation = explanation;
    }
}

TestSystem.java

package com;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;

public class TestSystem {
    private static final EntityManagerFactory EMF = Persistence
            .createEntityManagerFactory("word");

    public static void main(String[] args) {
        List<Word> lista = new ArrayList<Word>();

        for (Word x : getWords()){
            lista.add(x);
            System.out.println("Elo " + x.getWord());
        }

    /*    System.out.println("przed: ------------");
        lista.forEach(w->System.out.println("Elo " + w.getWord()));
        System.out.println("Po: ------------");  */
        EMF.close();
    }
    public static List<Word> getWords() {
        EntityManager em = EMF.createEntityManager();

        String strQuery = "SELECT c FROM word c WHERE c.id IS NOT NULL";

        TypedQuery<Word> tq = em.createQuery(strQuery, Word.class);
        List<Word> words = null;
        try {
            words = tq.getResultList();
        }
        catch(NoResultException ex) {
            ex.printStackTrace();
        }
        finally {
            em.close();
        }
        return words;
    }
}

To takie moje problemy wieku dziecięcego? Czy całe programowanie w Javie tak wygląda? Czuję się trochę zniechęcony, bo zamiast zająć się czymś kreatywnym biję sięz konfiguracją :/

0

"word is not mapped"
Może sprawdź w bazie nazwę tabeli

0

Nazwa bazy: wordspeaker
Tabela w bazie: word
Pola tabeli w bazie: id, word, translation, explanation

0

Spróbuj w zapytaniu użyć nazwy klasy, a nie nazwy tabeli. Ot, taka subtelna różnica: Word.

SELECT c FROM Word c WHERE c.id IS NOT NULL";

zamiast

SELECT c FROM word c WHERE c.id IS NOT NULL";
0

Tym razem zostałem uraczony takim błędem:

"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:61300,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:\Users\Specyk\Desktop\talking-flashcards\resources;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar" com.TestSystem
Connected to the target VM, address: '127.0.0.1:61300', transport: 'socket'
kwi 05, 2019 3:05:54 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: word]
kwi 05, 2019 3:05:54 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.1.Final}
kwi 05, 2019 3:05:55 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
kwi 05, 2019 3:05:55 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
kwi 05, 2019 3:05:56 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
kwi 05, 2019 3:05:56 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
kwi 05, 2019 3:05:56 PM org.hibernate.tuple.PojoInstantiator <init>
INFO: HHH000182: No default (no-argument) constructor for class: com.Word (class must be instantiated by Interceptor)
kwi 05, 2019 3:05:57 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Exception in thread "main" java.lang.UnsupportedOperationException: The application must supply JDBC connections
	at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44)
	at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
	at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
	at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1990)
	at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1920)
	at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1898)
	at org.hibernate.loader.Loader.doQuery(Loader.java:937)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
	at org.hibernate.loader.Loader.doList(Loader.java:2695)
	at org.hibernate.loader.Loader.doList(Loader.java:2678)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2512)
	at org.hibernate.loader.Loader.list(Loader.java:2507)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:396)
	at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:224)
	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1538)
	at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1561)
	at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1529)
	at org.hibernate.query.Query.getResultList(Query.java:168)
	at com.TestSystem.getWords(TestSystem.java:59)
	at com.TestSystem.main(TestSystem.java:20)
Disconnected from the target VM, address: '127.0.0.1:61300', transport: 'socket'

Process finished with exit code 1

Linijki o które chodzi oznaczyłem na końcu ////, tu 59:

 public static List<Word> getWords() {
        EntityManager em = EMF.createEntityManager();

        String strQuery = "SELECT c FROM Word c WHERE c.id IS NOT NULL";

        TypedQuery<Word> tq = em.createQuery(strQuery, Word.class);
        List<Word> words = null;
        try {
            words = tq.getResultList();              ////
        }
        catch(NoResultException ex) {
            ex.printStackTrace();
        }
        finally {
            em.close();
        }
        return words;
    }

A tu 20 (:

 public static void main(String[] args) {
        List<Word> lista = new ArrayList<Word>();

        for (Word x : getWords()){           ////
            lista.add(x);
            System.out.println("Elo " + x.getWord());
        }
}

Coś z nimi nie tak?

EDIT:
Jak w IDE daje analizę kodu dostaje info że:
Cannot resolve table 'word'
I to samo dla każdej kolumny. Czyli że co? Udało się nawiązać to połączenie czy nie? Bo już się pogubiłem...

EDIT2:
No jednak się nie udało nawiązać połączenia, bo jak wyłączyłem bazę to dostaję dokładnie ten sam błąd. Ale dlaczego?
Nw czy ma to znaczenie, mój serwer MySQL to ten z serwera XAMP. Jest tam baza wordspeaker i tabela word. Login: root, hasła brak (puste hasło). W logach brak śladów próby nawiązania połączenia. Pomocy!

0

Problemem jest to, że nie masz połączenia do bazy. Twój provider JPA (Hibernate) próbuje sobie wydedukować skąd ma wziąć połączenie do bazy i tak średnio mu idzie.

Masz wiele możliwości konfiguracji tych połączeń do bazy (propertiesy persistence.xml):

  • hibernate.connection.datasource - wskazać klucz jndi pod którym jest DataSource
  • hibernate.connection.provider_class - ustawić swojego providera połączeń
  • skonfigurować C3P0 (hibernatowy provider połączeń) - properties dodahibernate.c3p0.* (i dodać C3P0 do classpatha)
    ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1