【问题标题】:no persistence provider for entitymanager named - tried everything没有命名实体管理器的持久性提供程序 - 尝试了一切
【发布时间】:2014-07-10 13:56:40
【问题描述】:

我是 JPA 的新手,我遇到了这个臭名昭著的错误“没有命名实体管理器的持久性提供程序”。我在谷歌上进行了广泛的搜索,并尝试了所有可用的解决方案,但我并不害怕。

堆栈跟踪

javax.persistence.PersistenceException: No Persistence provider for EntityManager named suplink
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at com.supinfo.suplink.util.PersistenceManager.getEntityManagerFactory(PersistenceManager.java:13)

Persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="suplink" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/SupLink" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    </properties>
     <class>com.supinfo.suplink.entity.User</class>
</persistence-unit>

PersistenceManager

public class PersistenceManager {
private static EntityManagerFactory emf;

private PersistenceManager() { }

public static EntityManagerFactory getEntityManagerFactory() {
    if(emf == null) {
        emf = Persistence.createEntityManagerFactory("suplink");
    }
    return emf;
}

public static void closeEntityManagerFactory() {
    if(emf != null && emf.isOpen()) emf.close();
}
}

感谢您的帮助:)

【问题讨论】:

    标签: jpa persistence.xml


    【解决方案1】:

    尝试删除 transaction-type="RESOURCE_LOCAL" 无需此代码即可在我的机器上工作

    【讨论】:

      【解决方案2】:

      祝你的分级练习好运,试试下面的代码;)

      public class PersistenceManager {
      
          private static final EntityManagerFactory emf;
          private static final ThreadLocal<EntityManager> threadLocal;
          private static final Logger logger;
      
          static {
              emf = Persistence.createEntityManagerFactory("SupLink");
              threadLocal = new ThreadLocal<EntityManager>();
              logger = Logger.getLogger("SupLink");
              logger.setLevel(Level.ALL);
          }
      
          public static EntityManager getEntityManager() {
              EntityManager manager = threadLocal.get();
              if (manager == null || !manager.isOpen()) {
                  manager = emf.createEntityManager();
                  threadLocal.set(manager);
              }
              return manager;
          }
      
          public static void closeEntityManager() {
              EntityManager em = threadLocal.get();
              threadLocal.set(null);
              if (em != null)
                  em.close();
          }
      
          public static void beginTransaction() {
              getEntityManager().getTransaction().begin();
          }
      
          public static void commit() {
              getEntityManager().getTransaction().commit();
          }
      
          public static void rollback() {
              getEntityManager().getTransaction().rollback();
          }
      
          public static Query createQuery(String query) {
              return getEntityManager().createQuery(query);
          }
      
          public static void log(String info, Level level, Throwable ex) {
              logger.log(level, info, ex);
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2015-02-20
        相关资源
        最近更新 更多