我正在编写我的第一个 Hibernate JPA 项目。我有一个非常常见的问题(我发现了很多关于它的文章),但没有适合我的解决方案。
当我运行应用程序时,出现此错误:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named JpaTest2
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at net.andy.DatabaseAccess.testJpa(DatabaseAccess.java:55)
at net.andy.Main.main(Main.java:11)
我的 persistence.xml 是:
<persistence-unit name="pu3" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>net.andy.Writer</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<!-- <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> -->
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="postgres"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/testdb"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
这是我的课程,我尝试将某些内容保存到数据库:
public static void testJpa() {
// Use persistence.xml configuration
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaTest2");
EntityManager em = emf.createEntityManager();
// Work with the EM
Writer w = new Writer();
//MapEntity map = new MapEntity();
w.setId(5);
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.persist(w);
transaction.commit();
em.close();
emf.close();
}
我已经阅读了许多描述此错误的文章。到目前为止,我有:
- 在 persistence.xml 中添加了一行。
- 更改了 persistence.xml 位置(我可能尝试过每个人的位置还有 meta-inf 文件夹、myproject/src 等)
- 添加了 libs hibernate-core、hibernate-entitymanager、hibernate-commons-annotations、ejb3-persistence、hibernate-jpa、jta、postgresqljdbc(以及更多)。
如何解决这个问题?上面的代码几乎是从教程中复制的,所以我认为库或项目结构存在一些问题,但无法找到此问题的正确原因。