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();