我正在用Intellij社区版学习JPA。我已经读到可以将其与此Intellij版本一起使用。
我已经使用 pgAdmin 在本地主机上制作了我的数据库。我已经在我的项目中添加了外部jars(JDBC Postresql driver + javax.presistance(。我已经(手动(制作了具有持久性.xml文件的 META-INF 文件夹:
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="testname" transaction-type="RESOURCE_LOCAL">
<class>presistencetest.Car</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://host:localhost:5432/databasename"/>
<property name="javax.persistence.jdbc.user" value="postgresql"/>
<property name="javax.persistence.jdbc.password" value="password"/>
</properties>
</persistence-unit>
当我尝试启动简单测试(代码的一部分(时:
public static void main(String[] args) {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("testname");
EntityManager em = emf.createEntityManager();
我收到错误消息:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named testname
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at presistencetest.Car.main(Car.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
您是否检查过工件布局,持久性.xml应该位于/WEB-INF/classes/META-INF/persistence.xml下。据我所知,Intellij社区不会自动检测配置文件。
你需要定义 JPA 的提供者,因为 JPA 只是一个规范。最常见的是Hibernate和EclipseLink。
这是标签:
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
将提供程序替换为您想要或需要的任何内容。