1
我正在开发一个应用程序并首次使用Hibernate。我试图实现1-2-1映射,但它导致NullPointerException。我使用Oracle作为后端。oracle SQL Hibernate一对一映射返回NullPointerException
学生类
@Entity
@Table(name="student_info")
public class Student_Info {
@Id
@SequenceGenerator(name="sid", sequenceName="ids", initialValue=1, allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="sid")
private int rollNo;
@Column
private String sname;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
Student_detail类
@Entity
@Table(name="student_detail")
public class Student_detail {
@Id
@GeneratedValue(generator="newGenerator")//name of the primary key generator
@GenericGenerator(name="newGenerator", strategy="foreign", parameters={@Parameter(value="Student_Info", name="property")})
private int rollno;
private String phone;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="rollno")
private Student_Info student_Info;
public int getRollno() {
return rollno;
}
public void setRollno(int rollno) {
this.rollno = rollno;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Student_Info getStudent_Info() {
return student_Info;
}
public void setStudent_Info(Student_Info student_Info) {
this.student_Info = student_Info;
}
}
主类
Student_Info student_Info = new Student_Info();
student_Info.setSname("Vivek Singh");
Student_detail detail = new Student_detail();
detail.setPhone("2345678");
detail.setStudent_Info(student_Info);
SessionFactory factory = new Configuration().configure("hibernate/hibernate.cfg.xml").buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
session.save(detail);
session.getTransaction().commit();
session.close();
factory.close();
错误
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:547)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:4636)
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:81)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:105)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:668)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:660)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:655)
at com.hiber.Main.main(Main.java:23)
DB在外键中已经存在。还有一件事我正在使用序列来生成id,所以我认为它导致了问题,我不确定。
感谢它现在的工作。这个小小的错误毁了我很多时间。 –