0

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

ご協力いただきありがとうございます :)

4

2 に答える 2

1

transaction-type="RESOURCE_LOCAL" を削除しようとすると、このコードがなくても自分のマシンで動作します

于 2014-07-10T05:56:40.930 に答える
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);
    }

}
于 2013-01-27T03:42:48.543 に答える