尝试创建 EntityManagerFactory 时线程 "main" org.hibernate.service.spi.ServiceException 出现异常
Exception in thread "main" org.hibernate.service.spi.ServiceException when trying to create EntityManagerFactory
我有一个使用 h2 数据库的应用程序。 db 没有连接问题,因为我可以从那里获取一些值,但是当我尝试创建 EntityManagerFactory 时:EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService");
然后我在日志中看到:
2020-06-04 19:22:17.901 INFO 22496 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: EmployeeService]
2020-06-04 19:22:17.946 WARN 22496 --- [ main] o.h.e.j.c.i.ConnectionProviderInitiator : HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
2020-06-04 19:22:17.946 WARN 22496 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
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)
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)
在 application.properties 我有:
#H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console/
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
#Flyway
flyway.user=sa
flyway.password=
flyway.url=jdbc:h2:mem:testdb
flyway.locations=filesystem:db/migration
spring.flyway.baseline-on-migrate = true
并且在 persistance.xml 的 META-INF 中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="EmployeeService">
<class>com.example.demo.Employee.Employee</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb"/>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
仅在尝试创建上述 EntityManagerFactory
时出现问题。当我不尝试时,我可以转到 h2 web 控制台并查看 flyway 是否正确创建了数据库,是否插入,我可以做 selects/inserts 等等。
@编辑
添加 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.spingframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
如果检查异常,是在抱怨他没有你persistence.xml的方言。
请加
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
我有一个使用 h2 数据库的应用程序。 db 没有连接问题,因为我可以从那里获取一些值,但是当我尝试创建 EntityManagerFactory 时:EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService");
然后我在日志中看到:
2020-06-04 19:22:17.901 INFO 22496 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: EmployeeService]
2020-06-04 19:22:17.946 WARN 22496 --- [ main] o.h.e.j.c.i.ConnectionProviderInitiator : HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
2020-06-04 19:22:17.946 WARN 22496 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
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)
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)
在 application.properties 我有:
#H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console/
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
#Flyway
flyway.user=sa
flyway.password=
flyway.url=jdbc:h2:mem:testdb
flyway.locations=filesystem:db/migration
spring.flyway.baseline-on-migrate = true
并且在 persistance.xml 的 META-INF 中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="EmployeeService">
<class>com.example.demo.Employee.Employee</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb"/>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
仅在尝试创建上述 EntityManagerFactory
时出现问题。当我不尝试时,我可以转到 h2 web 控制台并查看 flyway 是否正确创建了数据库,是否插入,我可以做 selects/inserts 等等。
@编辑 添加 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.spingframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
如果检查异常,是在抱怨他没有你persistence.xml的方言。
请加
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>