Jpa java.lang.IllegalStateException:无法检索unitName CarLocPU的EntityManagerFactory
我从NetBeans 8.1、Glassfish 4.1和ApacheDerby(包含在Glassfish中)开始使用JavaEE 为此,我打电话是为了放置和存储汽车数据及其属性 但是这个简单的facade总是返回“java.lang.IllegalStateException”,而我在类文件中没有看到任何错误 下面是model.car的一个非常简单的实体,包含基本的getter和setter:Jpa java.lang.IllegalStateException:无法检索unitName CarLocPU的EntityManagerFactory,jpa,netbeans,derby,illegalstateexception,persistence-unit,Jpa,Netbeans,Derby,Illegalstateexception,Persistence Unit,我从NetBeans 8.1、Glassfish 4.1和ApacheDerby(包含在Glassfish中)开始使用JavaEE 为此,我打电话是为了放置和存储汽车数据及其属性 但是这个简单的facade总是返回“java.lang.IllegalStateException”,而我在类文件中没有看到任何错误 下面是model.car的一个非常简单的实体,包含基本的getter和setter: @Entity @Table(name = "car") public class Car impl
@Entity
@Table(name = "car")
public class Car implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String brand;
private String model;
private String year;
private String energy;
private String hp;
private String tp;
private byte[] picture;
以下是该实体在Apache Derby中存储数据的“门面”:
@Stateless
public class CarFacade extends AbstractFacade<Car> {
@PersistenceContext(unitName = "CarLocPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public CarFacade() {
super(Car.class);
}
}
提前感谢您的帮助
编辑:
以下是该项目的结构
这是persistence.xml内容,应用程序名为“CarLoc”
java:app/jdbc/CarLoc
假的
如果您在EJB容器之外使用JPA,则需要在persistence.xml中声明JPA
默认情况下,Glassfish使用EclipseLink作为JPA提供者。假设您不想更改此设置,您将希望更改persistence.xml以将EclipseLink声明为JPA提供程序:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="CarLocPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-database" value="Derby"/>
<!-- JDBC connection properties -->
<property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/myDBName;create=true;"/>
<property name="eclipselink.jdbc.user" value="APP"/>
<property name="eclipselink.jdbc.password" value="APP"/>
</properties>
</persistence-unit>
</persistence>
org.eclipse.persistence.jpa.PersistenceProvider
假的
来源:EntityManager出现问题,请使用您的
persistence.xml更新该问题。如果以后出现异常,请关注最底层的根本原因。此后的一切原因都只是结果。我减少了问题中不相关的噪音,因为您似乎错误地将焦点放在JSF上。尽管如此,今后还是要尝试从字面上解释和/或将根本原因复制成一个像样的解释。通常答案就在这里。你能提供你的项目结构吗?我在问题中添加了这些元素。感谢您的反馈,我注意到StackTrace的有趣行位于底部,与JSE不同。您的配置文件应该位于META-INF文件夹中,以便可以在运行时类路径中访问,如@BalusC所述。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="CarLocPU" transaction-type="JTA">
<jta-data-source>java:app/jdbc/CarLoc</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="CarLocPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-database" value="Derby"/>
<!-- JDBC connection properties -->
<property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/myDBName;create=true;"/>
<property name="eclipselink.jdbc.user" value="APP"/>
<property name="eclipselink.jdbc.password" value="APP"/>
</properties>
</persistence-unit>
</persistence>