Rob*_*nru 143 java persistence jpa toplink
我在META-INF目录下使用toplink,使用相同名称的persistence.xml.然后我让我的代码调用它:
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息
2009-07-21 09:22:41,018 [main] ERROR - No Persistence provider for EntityManager named agisdb
javax.persistence.PersistenceException: No Persistence provider for EntityManager named agisdb
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
这是persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="agisdb">
<class>com.agis.livedb.domain.AddressEntity</class>
<class>com.agis.livedb.domain.TrafficCameraEntity</class>
<class>com.agis.livedb.domain.TrafficPhotoEntity</class>
<class>com.agis.livedb.domain.TrafficReportEntity</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
它应该在类路径中.然而,我得到了上述错误.
Ual*_*Jr. 86
把它放在"hibernate-entitymanager.jar"应用程序的类路径中.
对于较新的版本,您应该使用"hibernate-core.jar"而不是弃用hibernate-entitymanager
如果您正在运行某些IDE,例如Eclipse:Project Properties -> Java Build Path -> Libraries.
否则将其放入/lib您的应用程序中.
小智 84
之后<persistence-unit name="agisdb">,定义持久性提供程序名称:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
小智 66
确保该persistence.xml文件位于以下目录中:<webroot>/WEB-INF/classes/META-INF
tec*_*rat 17
我在我的pom.xml文件中需要这个:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.6.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Sne*_*neg 15
面对同样的问题,很长一段时间都找不到解决方案.在我的情况下,它有助于替换
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
同
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Run Code Online (Sandbox Code Playgroud)
也许你定义了一个提供者,<provider>org.hibernate.ejb.HibernatePersistence</provider>但在jar中引用另一个提供者.这发生在我身上:我的persistence.xml提供程序是openjpa,但我在我的类路径中使用了eclipselink.希望这有帮助!
快速建议:
在独立应用程序(JavaEE之外)中使用JPA时,需要在某处指定持久性提供程序.这可以通过我所知道的两种方式完成:
<provider>org.hibernate.ejb.HibernatePersistence</provider>正如Chris所说的那样:https : //stackoverflow.com/a/1285436/784594)在我的情况下,我发现由于maven配置错误,hibernate-entitymanager jar不包含在依赖项中,即使它是其他模块的瞬态依赖项.
如果您使用的是Eclipse,请确保排除模式不会persistence.xml从构建路径中删除源文件夹.
MyProject/src/main/java -> Excluded: <your_pattern>Excluded: (None)通过选择节点并单击左侧的编辑...按钮将其设置为.小智 5
我在这里参加聚会晚了几年,但在尝试让 Hibernate 3.5.1 与 HSQLDB 和桌面 JavaFX 程序一起工作时遇到了同样的异常。我在这个线程的帮助下和大量的试验和错误中得到了它。您似乎因各种问题而收到此错误:
No Persistence provider for EntityManager named mick
Run Code Online (Sandbox Code Playgroud)
我尝试构建休眠教程示例,但由于我使用的是 Java 10,因此无法轻松构建和运行它们。我放弃了,并不是真的想浪费时间解决它的问题。设置 module-info.java 文件(Jigsaw)是许多人尚未发现的另一个毛球。
有点令人困惑的是,这些(下面)是我在 build.gradle 文件中唯一需要的两个文件。Hibernate 文档并不清楚您需要包含哪些 Jars。Entity-manager 引起了混乱,在最新的 Hibernate 版本中不再需要,javax.persistence-api 也不再需要。请注意,我在这里使用的是 Java 10,因此我必须包含 jaxb-api,以解决一些 xml-bind 错误,并在我的 module-info.java 文件中为 java 持久性模块添加一个条目。
构建.gradle
// https://mvnrepository.com/artifact/org.hibernate/hibernate-core
compile('org.hibernate:hibernate-core:5.3.1.Final')
// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
Run Code Online (Sandbox Code Playgroud)
模块信息.java
// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;
Run Code Online (Sandbox Code Playgroud)
使用 hibernate 5.3.1,您无需在下面的 persistence.xml 文件中指定提供程序。如果未提供,则默认选择 Hibernate 提供程序。
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Run Code Online (Sandbox Code Playgroud)
persistence.xml 文件应位于正确的目录中,以便:
src/main/resources/META-INF/persistence.xml
Run Code Online (Sandbox Code Playgroud)
单步调试 Intellij 调试器中的 hibernate 源代码,在那里检查方言,也会抛出完全相同的异常,因为persistence.xml 文件中缺少方言属性。我添加了这个(为您的数据库类型添加正确的一个):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Run Code Online (Sandbox Code Playgroud)
在此之后,我仍然遇到相同的异常,因此在 Intellij 中再次单步调试调试器,发现我试图保留的测试实体(简单的父子示例)缺少 OneToMany、ManyToOne 关系的注释。我解决了这个问题,异常消失了,我的实体保持正常。
这是我完整的最终persistence.xml:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="mick" transaction-type="RESOURCE_LOCAL">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<!-- Provided in latest release of hibernate
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
-->
<class>com.micks.scenebuilderdemo.database.Parent</class>
<class>com.micks.scenebuilderdemo.database.Child</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/>
<property name="javax.persistence.jdbc.url"
value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
我可能在这颗宝石上浪费了大约半天时间。我的建议是从非常简单的开始 - 具有一两个字段的单个测试实体,因为似乎此异常可能有很多原因。
| 归档时间: |
|
| 查看次数: |
350277 次 |
| 最近记录: |