Jpa RCP Pulgin项目中没有EntityManager的持久性提供程序
我得到一份工作Jpa RCP Pulgin项目中没有EntityManager的持久性提供程序,jpa,eclipse-plugin,eclipse-rcp,Jpa,Eclipse Plugin,Eclipse Rcp,我得到一份工作 No Persistence provider for EntityManager for named X 在我正在开发的一个RCP插件应用程序中。我使用hibernate作为ORM和javax.persistence。我正在使用Derby作为我的数据库。我已经将所有hibernate Jar和支持Jar组合成一个插件,并添加到我正在研究的当前项目中。我束手无策。任何帮助都将不胜感激。到目前为止,我已经在不同的地方寻找答案,但没有找到任何答案 我已将Persistence.xm
No Persistence provider for EntityManager for named X
在我正在开发的一个RCP插件应用程序中。我使用hibernate作为ORM和javax.persistence。我正在使用Derby作为我的数据库。我已经将所有hibernate Jar和支持Jar组合成一个插件,并添加到我正在研究的当前项目中。我束手无策。任何帮助都将不胜感激。到目前为止,我已经在不同的地方寻找答案,但没有找到任何答案
我已将Persistence.xml文件放在类路径的/META-INF/Persistence.xml下。我已尝试将persistence.xml放在这些位置-/RCMSecond/src/persistence.xml和/RCMSecond/src/META-INF/persistence.xml和/RCMSecond/META-INF/persistence.xml但RCP项目仍抛出相同的错误跟踪 persistence.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.1" 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">
<persistence-unit name="RCMSecond" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>entity.ColumnMeta</class>
<class>entity.DataBase_CompositeID</class>
<class>entity.Files</class>
<class>entity.Database</class>
<class>entity.LookUpCols</class>
<class>entity.Project</class>
<class>entity.QueryEntity</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:simpleDB;create=true" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.logging.level" value="SEVERE" />
<property name="show_sql" value="true" />
<property name="format_sql" value="true"></property>
</properties>
</persistence-unit>
</persistence>
org.hibernate.jpa.HibernatePersistenceProvider
entity.ColumnMeta
entity.DataBase_CompositeID
实体文件
实体数据库
entity.LookUpCols
实体项目
实体
GenericDAOImpl.java
package daoImpl;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import org.hibernate.Criteria;
import org.hibernate.Session;
import dao.GenericDAO;
import exceptions.EntityNotPresent;
public class GenericDAOImpl < T, ID extends Serializable > implements GenericDAO < T, ID > {
protected EntityManager entityManager;
protected EntityTransaction entityTransaction;
public GenericDAOImpl() {
super();
EntityManagerFactory factory = Persistence.createEntityManagerFactory("RCMSecond");
this.entityManager = factory.createEntityManager();
entityTransaction = this.entityManager.getTransaction();
}
@
Override
public T save(T t) {
entityTransaction.begin();
entityManager.persist(t);
entityManager.flush();
entityTransaction.commit();
return t;
}
@
SuppressWarnings({
"unchecked", "rawtypes"
})@ Override
public List < T > readAll(String namedQueryName, Class clazz) {
TypedQuery < T > query = entityManager.createNamedQuery(namedQueryName, clazz);
return query.getResultList();
}
@
SuppressWarnings("unchecked")@ Override
public T readById(@SuppressWarnings("rawtypes") Class clazz, ID id) {
entityTransaction.begin();
T t = (T) entityManager.find(clazz, id);
entityTransaction.commit();
return t;
}
@
Override
public T update(@SuppressWarnings("rawtypes") Class clazz, ID id, T updated) throws EntityNotPresent {
if (isEntityExists(clazz, id)) {
entityManager.merge(updated);
return updated;
} else {
throw new EntityNotPresent("Entity Not found, So Could not be updated");
}
}
@
Override
public void delete(@SuppressWarnings("rawtypes") Class clazz, ID removeId) {
if (isEntityExists(clazz, removeId)) {
T old = readById(clazz, removeId);
entityTransaction.begin();
entityManager.remove(old);
entityTransaction.commit();
}
}
@
SuppressWarnings("unchecked")@ Override
public boolean isEntityExists(@SuppressWarnings("rawtypes") Class clazz, ID id) {
return entityManager.find(clazz, id) != null;
}
@
SuppressWarnings("unchecked")@ Override
public T getFirstRecord(Class <? > clazz) {
entityTransaction.begin();
Session session = entityManager.unwrap(Session.class);
Criteria queryCriteria = session.createCriteria(clazz);
queryCriteria.setFirstResult(0);
queryCriteria.setMaxResults(1);
T t = (T) queryCriteria.list().get(0);
entityTransaction.commit();
return t;
}
@
Override
public List < T > getByQuery(String queryExecute, Object[] pars, @SuppressWarnings("rawtypes") Class clazz) {
entityTransaction.begin();@
SuppressWarnings("unchecked")
TypedQuery < T > query = entityManager.createQuery(queryExecute, clazz);
for (int i = 0; i < pars.length; i++) {
query.setParameter("arg" + i, pars[i]);
}
List < T > results = query.getResultList();
entityTransaction.commit();
return results;
}
}
包daoImpl;
导入java.io.Serializable;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.EntityTransaction;
导入javax.persistence.persistence;
导入javax.persistence.TypedQuery;
导入org.hibernate.Criteria;
导入org.hibernate.Session;
导入dao.GenericDAO;
导入异常。实体不存在;
公共类GenericDAOImpl实现GenericDAO{
受保护的实体管理器实体管理器;
受保护的实体交易实体交易;
公共通用DAOImpl(){
超级();
EntityManagerFactory工厂=Persistence.createEntityManagerFactory(“RCMSecond”);
this.entityManager=factory.createEntityManager();
entityTransaction=this.entityManager.getTransaction();
}
@
推翻
公共T存储(T T){
entityTransaction.begin();
entityManager.persist(t);
entityManager.flush();
entityTransaction.commit();
返回t;
}
@
抑制警告({
“未选中”,“原始类型”
})@凌驾
public ListreadAll(字符串名queryname,类clazz){
TypedQueryquery=entityManager.createNamedQuery(namedQueryName,clazz);
返回query.getResultList();
}
@
SuppressWarnings(“未选中”)@覆盖
公共T readById(@SuppressWarnings(“rawtypes”)类clazz,ID){
entityTransaction.begin();
T=(T)entityManager.find(clazz,id);
entityTransaction.commit();
返回t;
}
@
推翻
public T update(@SuppressWarnings(“rawtypes”)类clazz,ID,T updated)抛出EntityNotPresent{
如果(isEntityExists(clazz,id)){
entityManager.merge(已更新);
更新的回报;
}否则{
抛出新EntityNotPresent(“未找到实体,因此无法更新”);
}
}
@
推翻
public void delete(@SuppressWarnings(“rawtypes”)类clazz,ID removeId){
如果(i实体存在(clazz,removeId)){
T old=readById(clazz,removeId);
entityTransaction.begin();
entityManager.remove(旧版);
entityTransaction.commit();
}
}
@
SuppressWarnings(“未选中”)@覆盖
公共布尔值isEntityExists(@SuppressWarnings(“rawtypes”)类clazz,ID){
返回entityManager.find(clazz,id)!=null;
}
@
SuppressWarnings(“未选中”)@覆盖
公共T getFirstRecord(类别
META-INF目录包含的JAR文件或目录
persistence.xml被称为持久性单元的根
持久性单元的根由持久性单元的根决定
持久性单元可以打包为WAR或EJBJAR文件或
可以打包为JAR文件,然后可以包含在WAR或
耳锉
• If you package the persistent unit as a set of classes in an EJB JAR
file, persistence.xml should be put in the EJB JAR's META-INF directory.
• If you package the persistence unit as a set of classes in a WAR file,
persistence.xml should be located in the WAR file's
WEB-INF/classes/META-INF directory.
• If you package the persistence unit in a JAR file that will be
included in a WAR or EAR file, the JAR file should be located in either
- the WEB-INF/lib directory of a WAR Or
- the EAR file's library directory
检查配置。您的Eclipse应该能够映射资源文件并生成所有包。检查项目->属性->生成路径以配置项目依赖项
离题提示:
您正在尝试通过注入获取EntityManager:
@PersistenceContext
protected EntityManager entityManager
然后,要从EntityManagerFactory实例获取EntityManager,请执行以下操作:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("RCMSecond");
this.entityManager = factory.createEntityManager();
谢谢,我会检查它并很快更新。当然,我没有注意到EntityManagerFactory被注入了两次。问题是Eclipse RCP项目有自己的解决类路径的方法。这不是Java项目的正常方法。因此将persistence.xml添加到类路径很困难。我已经放置了Persistence.xml文件位于/META-INF/persistence.xml下的类路径中。我已尝试将persistence.xml放在以下位置-/RCMSecond/src/persistence.xml和/RCMSecond/src/META-INF/persistence.xml和/RCMSecond/META-INF/persistence.xml,但RCP项目仍抛出相同的错误跟踪。
EntityManagerFactory factory = Persistence.createEntityManagerFactory("RCMSecond");
this.entityManager = factory.createEntityManager();