Java 没有名为的EntityManager的持久性提供程序
我使用Java 没有名为的EntityManager的持久性提供程序,java,jpa,persistence,toplink,Java,Jpa,Persistence,Toplink,我使用TopLink在META-INF目录下使用同名的persistence.xml。 然后,我用以下代码调用它: EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); 但是,我收到了以下错误消息: 2009-07-21 09:22:41,018 [main] ERROR - No Persistence provider for EntityManager named agisdb jav
TopLink
在META-INF
目录下使用同名的persistence.xml
。
然后,我用以下代码调用它:
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
但是,我收到了以下错误消息:
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)
它应该在类路径中。但是,我得到了上面的错误。在
之后,定义持久性提供程序名称:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
org.hibernate.ejb.HibernatePersistence
确保persistence.xml
文件位于目录中:/WEB-INF/classes/META-INF
也许您定义了一个提供程序,如org.hibernate.ejb.HibernatePersistence
,但在jar中引用了另一个。我就是这样:我的persistence.xml提供程序是openjpa,但我在类路径中使用了eclipselink。
希望这有帮助 角落案例:如果您使用的是m2Eclipse,它会自动在您的资源文件夹中放入excludes。然后,当您尝试在eclipse内部运行测试时,随后缺少persistence.xml将产生此错误。当实体管理器试图指向多个持久性单元时,就会发生此错误。执行以下步骤:
“hibernate entitymanager.jar”
放在应用程序的类路径中。对于较新的版本,您应该使用
“hibernate core.jar”
而不是不推荐的hibernate entitymanager
如果您正在运行某些IDE,如Eclipse:项目属性->Java构建路径->库。
否则,请将其放入应用程序的
/lib
。问题已经得到了回答,但我只是想发布一条阻碍我的提示。此异常是在以前的错误之后引发的。我得到了这个:
property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead.
尽管我已更改persistence.xml以包含新的属性名称:
<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>
在关于不推荐使用的属性名称的消息之后,我得到了与上面相同的PersistenceException和一个完整的其他异常字符串。我的建议:确保检查异常的开头
Glassfish v2.1.1中似乎存在一个bug,其中重新部署或取消部署和部署不会更新persistence.xml,而persistence.xml正在缓存到某个地方。我必须重新启动服务器,然后它才能工作。还有一点:如果您在Eclipse RCP环境中遇到这个问题,您可能必须将工厂生成从
Persistence.createEntityManagerFactory
更改为new PersistenceProvider().createEntityManagerFactory
有关此问题的详细讨论,请参阅。确保已在“src”文件夹下创建persistence.xml文件。我是在项目文件夹下创建的,这就是我的问题。在OSGi上下文中,有必要在bundle的MANIFEST.MF中列出持久性单元,例如
JPA-PersistenceUnits: my-persistence-unit
否则,JPA包将不知道您的包包含持久性单元
请参阅。在类路径中需要以下jar文件:
如果您正在使用Eclipse,请确保排除模式不会从构建路径上的源文件夹中删除您的
persistence.xml
。MyProject/src/main/java->Excluded:
树节点的排除模式
Excluded:(None)
我在pom.xml文件中需要这个:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.6.Final</version>
</dependency>
org.hibernate
休眠实体管理器
4.2.6.最终版本
快速建议:
- 检查persistence.xml是否在类路径中
- 检查hibernate提供程序是否在类路径中
- 将provider元素添加到持久化单元:
(如Chris在正确的Ansare中所述:)org.hibernate.ejb.HibernatePersistence
- 必须将接口javax.persistence.spi.PersistenceProvider指定为服务,请参见此处:(在类路径中包含hibernate或其他JPA实现时,通常会包含此选项
在我的例子中,我发现由于maven的错误配置,hibernate entitymanager jar没有作为依赖项包括在内,即使它是其他模块的暂时依赖项。我也面临同样的问题,但仍然存在 我通过添加另一个jar文件解决了我的问题,该文件必须是(javax.persistence_2.1.0.v201304241213.jar.jar) 所需罐子:
-javax.persistence_2.1.0.v201304241213.jar
-eclipselink.jar
-jdbc.jar(取决于使用的数据库)。
我希望这有帮助。我也有这个错误,但问题是
persistence.xml
中的名称空间uri
我替换了http://xmlns.jcp.org/xml/ns/persistence
至http://java.sun.com/xml/ns/persistence
和版本2.1到2.0
它现在正在工作。您需要在类路径中添加hibernate-entitymanager-x.jar 在Hibernate4.x中,如果jar存在
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.6.Final</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<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="sample">
<class>org.pramod.data.object.UserDetail</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.archive.autodetection" value="true"/>
</properties>
</persistence-unit>
package org.pramod.data.object;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user_detail")
public class UserDetail {
@Id
@Column(name="user_id")
private int id;
@Column(name="user_name")
private String userName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "UserDetail [id=" + id + ", userName=" + userName + "]";
}
}
package org.pramod.hibernate;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.pramod.data.object.UserDetail;
public class HibernateTest {
private static EntityManagerFactory entityManagerFactory;
public static void main(String[] args) {
UserDetail user = new UserDetail();
user.setId(1);
user.setUserName("Pramod Sharma");
try {
entityManagerFactory = Persistence.createEntityManagerFactory("sample");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( user );
entityManager.getTransaction().commit();
System.out.println("successfull");
entityManager.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
UserDetail [id=1, userName=Pramod Sharma]
Hibernate: drop table if exists user_details
Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id))
Hibernate: insert into user_details (user_name, user_id) values (?, ?)
successfull
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
No Persistence provider for EntityManager named mick
// 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'
// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
src/main/resources/META-INF/persistence.xml
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<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>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.0</version>
</dependency>
<persistence-unit name="com.myapp.model.jpa"
transaction-type="RESOURCE_LOCAL">
public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa";
Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);
<property name="javax.persistence.jdbc.url" value="...”/>
<property name="javax.persistence.jdbc.password" value="...”/>
mvn install -e -Dmaven.repo.local=$WORKSPACE/.repository.
@Throws(HibernateException::class)
fun getSessionFactory() : SessionFactory {
return Configuration()
.configure(getFile())
.buildSessionFactory()
}
private fun getFile(canonicalName: String): File {
val absolutePathCurrentModule = System.getProperty("user.dir")
val pathFromProjectRoot = absolutePathCurrentModule.dropLastWhile { it != '/' }
val absolutePathFromProjectRoot = "${pathFromProjectRoot}module-name/src/main/resources/$canonicalName"
println("Absolute Path of secret-hibernate.cfg.xml: $absolutePathFromProjectRoot")
return File(absolutePathFromProjectRoot)
}