【发布时间】:2010-10-15 11:35:01
【问题描述】:
两张表,一张的主键是另一张的外键(旧版数据库)
我使用了双向的一对一映射:
@Entity
public class First {
@Id protected int a;
@OneToOne(mappedBy ="first", cascade = CascadeType.PERSIST)
@JoinColumn(name = "a")
protected Second second;
}
@Entity
public class Second {
@Id protected int a;
@OneToOne
@JoinColumn(name = "a", insertable = false)
First first;
}
问题出在运行时:
public class Persister {
public static void main(String[] args) {
EntityManagerFactory aEntityManagerFactory;
EntityManager aEntityManager;
aEntityManagerFactory =
Persistence.createEntityManagerFactory("bibit_notification_jpa");
aEntityManager = aEntityManagerFactory.createEntityManager();
Second aSecond = new Second();
aSecond.a = 1;
First aFirst = new First();
aFirst.a = 1;
aFirst.second = aSecond;
aEntityManager.getTransaction().begin();
aEntityManager.persist(aFirst);
aEntityManager.getTransaction().commit();
}}
,它会抛出这个异常:
线程“主”javax.persistence.PersistenceException 中的异常:java.lang.NullPointerException 在 org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:252) 在 org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) 在 Persister.main(Persister.java:14) 引起:java.lang.NullPointerException 在 org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135) 在 org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130) 在 org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296) 在 org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115) 在 org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1233) 在 org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154) 在 org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:869) 在 org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:183) 在 org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240) ... 4 更多【问题讨论】:
-
什么时候运行?你能提供你正在运行的代码吗?还有堆栈跟踪?
-
你能贴出 Persistence.createEntityManagerFactory 的代码吗?另外,您确定要让班级名称为 Presister 吗?确保在任何地方都是这样拼写的。
-
Persistence.createEntityManagerFactory 在 javax.persistence.Persistence 中。并且 Presister 不被称为任何仅包含“main”的地方
-
也许如果它是一个姐妹,而不是一个presister,它会工作......;)
-
但是说真的,Presister 的第 14 行在哪里?很高兴知道这一点。