Java EclipseLink初始化中的NullPointerException
我正在使用maven存储库中的Eclipselink 2.6.0-RC2并尝试继承 我有以下三个课程: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
@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在静态变量中初始化,我不会分析为什么它在一种情况下工作,而在另一种情况下不工作,因为它只是错误的。在实体中使用实体管理器被许多人(包括我在内)认为是一种反模式,但你会在网上找到关于它的公开辩论。我会把这条评论作为答案,因为它有帮助。