我在IntelliJ中有一个使用Hibernate的JavaFX Maven项目。当应用程序启动时,我收到以下错误消息:
没有名为xyz
的entitymanager的持久性提供程序
为什么呢?我的 META-INF / persistence.xml 位于 myproject / src / main / resources 中(该目录在项目设置中被检查为资源文件夹)。 我确信我已经通过Maven下载了所有Hibernate JAR。
我的persistence.xml是正确的:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="xyz">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>entity.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:java.sqlite"/>
<property name="javax.persistence.jdbc.driver_class" value="oracle.jdbc.driver"/>
<property name="hibernate.hbm2ddl.auto" value="none"/>
<property name="hibernate.show_sql" value="false"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
Java代码:
factory = Persistence.createEntityManagerFactory("xyz");
在我的一个旧的非Maven项目中,上面的代码运行良好。
答案 0 :(得分:1)
您的persistence.xml必须位于META-INF文件夹
中答案 1 :(得分:0)
在我的案例中有不同的背景和解决方案:
请参阅以下日志:
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=sa}
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
...
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named NewPersistenceUnit`
从上面的日志中可以看出,已找到persistenceUnit,并提取了一些数据,如方言,用户名和密码。
实体的映射存在问题。通过在实体上逐一评论@Entity
,我能够找到问题并解决问题,persistence.xml
文件没有任何变化。
我不知道为什么在实体映射出现问题时应该显示No Persistence provider for EntityManager named X
之类的错误!