Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa java.lang.IllegalStateException:无法检索unitName CarLocPU的EntityManagerFactory_Jpa_Netbeans_Derby_Illegalstateexception_Persistence Unit - Fatal编程技术网

Jpa java.lang.IllegalStateException:无法检索unitName CarLocPU的EntityManagerFactory

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

我从NetBeans 8.1、Glassfish 4.1和ApacheDerby(包含在Glassfish中)开始使用JavaEE

为此,我打电话是为了放置和存储汽车数据及其属性

但是这个简单的facade总是返回“java.lang.IllegalStateException”,而我在类文件中没有看到任何错误

下面是model.car的一个非常简单的实体,包含基本的getter和setter:

@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>