2013-01-24 57 views
0

我是JPA新手,並且我得到了這個臭名昭着的錯誤「沒有爲entitymanager命名的持久性提供者」。我在谷歌上搜索的範圍很廣,並且嘗試了每一種可用的解決方案,我無所畏懼。沒有實體管理器的持久性提供者命名 - 嘗試了一切

堆棧跟蹤

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

感謝您的幫助:)

回答

0

爲您分級運動,試試下面的代碼祝你好運;)

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

} 
1

嘗試刪除事務類型=「RESOURCE_LOCAL」我的機器上 不工作此代碼

相關問題