EclipseLink 初始化中的 NullPointerException
NullPointerException in EclipseLink initialization
我正在使用 Maven 存储库中的 Eclipselink 2.6.0-RC2 并尝试继承。
我有下面的 3 类:
@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
和 BarProject
中的 main
均失败并出现以下异常
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
不会失败,反之亦然。
我曾尝试删除 Project
中的 abstract
并为其分配一个 @DiscriminatorValue
,但它不起作用。
如果 main
放在 Project
中,它也不会起作用。
我使用的注释是否有任何错误导致它无法正常工作?
从实体中删除对 EntityManagerFactory
和 EntityManager
的引用,将其与 main()
方法一起移动到一些新的 class 并重试。
为了初始化持久性单元,必须初始化和扫描所有实体。您的设置干扰了这一点,PU 在静态变量中初始化,我不会分析为什么它在一种情况下有效而在另一种情况下无效,因为它是错误的。许多人(包括我)认为在实体内部使用实体管理器是一种反模式,但您会在网络上找到关于它的公开辩论。
我正在使用 Maven 存储库中的 Eclipselink 2.6.0-RC2 并尝试继承。
我有下面的 3 类:
@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
和 BarProject
中的 main
均失败并出现以下异常
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
不会失败,反之亦然。
我曾尝试删除 Project
中的 abstract
并为其分配一个 @DiscriminatorValue
,但它不起作用。
如果 main
放在 Project
中,它也不会起作用。
我使用的注释是否有任何错误导致它无法正常工作?
从实体中删除对 EntityManagerFactory
和 EntityManager
的引用,将其与 main()
方法一起移动到一些新的 class 并重试。
为了初始化持久性单元,必须初始化和扫描所有实体。您的设置干扰了这一点,PU 在静态变量中初始化,我不会分析为什么它在一种情况下有效而在另一种情况下无效,因为它是错误的。许多人(包括我)认为在实体内部使用实体管理器是一种反模式,但您会在网络上找到关于它的公开辩论。