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
Java EclipseLink初始化中的NullPointerException_Java_Jpa_Eclipselink - Fatal编程技术网

Java EclipseLink初始化中的NullPointerException

Java EclipseLink初始化中的NullPointerException,java,jpa,eclipselink,Java,Jpa,Eclipselink,我正在使用maven存储库中的Eclipselink 2.6.0-RC2并尝试继承 我有以下三个课程: @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "CLASSNAME") public abstract class Project { @Id @Column(len

我正在使用maven存储库中的Eclipselink 2.6.0-RC2并尝试继承

我有以下三个课程:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "CLASSNAME")
public abstract class Project {
    @Id
    @Column(length = 50)
    private String id;
}

@Entity
@DiscriminatorValue(value = "Foo")
public class FooProject extends Project {
    private static EntityManagerFactory emf = Persistence
        .createEntityManagerFactory("vasp");
    private static EntityManager em = emf.createEntityManager();


    public static void main(String[] args) {
    }
}

@Entity
@DiscriminatorValue(value = "Bar")
public class BarProject extends Project {
    private static EntityManagerFactory emf = Persistence
        .createEntityManagerFactory("vasp");
    private static EntityManager em = emf.createEntityManager();

    public static void main(String[] args) {
    }
}
对于上述配置,
FooProject
中的
main
BarProject
均失败,出现以下异常

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: javax.persistence.PersistenceException: java.lang.NullPointerException
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:812)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303)
如果我删除了
BarProject
上的
@Entity
说明,则
FooProject
上的
main
不会失败,反之亦然

我已尝试删除
项目中的
摘要
,并为其分配一个
@DiscriminatorValue
,但它不起作用

如果
main
放在
Project
中,它就永远不会工作


我正在使用的注释中是否有任何错误阻止了它的工作?

从实体中删除对
EntityManagerFactory
EntityManager
的引用,将其与
main()
方法一起移动到某个新类,然后重试


为了初始化持久性单元,必须初始化和扫描所有实体。您的设置干扰了这一点,因为PU在静态变量中初始化,我不会分析为什么它在一种情况下工作,而在另一种情况下不工作,因为它只是错误的。在实体中使用实体管理器被许多人(包括我在内)认为是一种反模式,但你会在网上找到关于它的公开辩论。

从实体中删除对
EntityManagerFactory
EntityManager
的引用,将其与
main()
方法一起移动到某个新类中,然后再试一次。@prefragmaric谢谢,成功了。在类的静态初始值设定项中请求实体管理器是否非法?您知道为什么在删除另一个实体管理器时,具有实体管理器的实体本身可以工作吗?为了初始化持久性单元,必须初始化和扫描所有实体。您的设置干扰了这一点,因为PU在静态变量中初始化,我不会分析为什么它在一种情况下工作,而在另一种情况下不工作,因为它只是错误的。在实体中使用实体管理器被许多人(包括我在内)认为是一种反模式,但你会在网上找到关于它的公开辩论。我会把这条评论作为答案,因为它有帮助。