org.hibernate.internal.SessionImpl.save中的NullPointerException(SessionImpl.java:702)

时间:2014-08-21 04:45:11

标签: hibernate

我正在使用OneToOne映射在MySQL中生成表。我在执行期间得到NullPointerException .... 我正在使用Hibernate 4.3.6.Final

Student.java - 子类

    @Entity
    @Table(name="STUDENT")
    public class Student {

    @Id @GeneratedValue(generator = "newGenerator")
    @GenericGenerator (name = "newGenerator" , strategy = "foreign" , parameters = { @Parameter (value = "student_info", name = "property")})
    @Column(name="ROLL_NO")
    private int rollNo;

    @Column(name="MOBILE_NO")
    private int mobileNo;

    @OneToOne(optional = false , cascade = CascadeType.ALL)
    @JoinColumn(name = "rollNo")
    private Student_Info studentInfo;


    public Student_Info getStudentInfo() {
        return studentInfo;
    }
    public void setStudentInfo(Student_Info studentInfo) {
        this.studentInfo = studentInfo;
    }
    public int getRollNo() {
        return rollNo;
    }
    public void setRollNo(int rollNo) {
        this.rollNo = rollNo;
    }
    public int getMobileNo() {
        return mobileNo;
    }
    public void setMobileNo(int mobileNo) {
        this.mobileNo = mobileNo;
    }
}

Student_Info.java - ParentClass

    @Entity
    @Table(name="STUDENT_INFORMATION")
    public class Student_Info {

    @Id @GeneratedValue
    @Column(name="ROLL_NO")
    private int rollNo;

    @Column(name="FULL_NAME")
    private String name;

    @Temporal (TemporalType.DATE)
    @Column(name="DATE")
    private Date date;

    public int getrollNo() {
        return rollNo;
    }

    public void setrollNo(int rollNo) {
        this.rollNo = rollNo;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

主要课程 -

public static void main(String[] args) {

        //Child class is Student , Parent class is Student_Info

        Student_Info studentInfo = new Student_Info();

        studentInfo.setName("Aman");
        studentInfo.setDate(new Date());

        /*  Student_Info studentInfo1 = new Student_Info();
        studentInfo1.setName("Jain");
        studentInfo1.setDate(new Date());
        studentInfo1.setrollNo(36);*/

        Student student = new Student();
        student.setMobileNo(93434);

        student.setStudentInfo(studentInfo);

        SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        Session session  = sessionFactory.openSession();        
        session.beginTransaction();

        session.save(student);          //Exception caused by this line 

        session.getTransaction().commit();
        session.close();
        sessionFactory.close();


    }

异常消息

Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:650)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:4736)
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:96)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
at com.sanchit.hibernate.Main.main(Main.java:39)

1 个答案:

答案 0 :(得分:1)

尝试替换

@GenericGenerator (name = "newGenerator" , strategy = "foreign" , parameters = { @Parameter (value = "student_info", name = "property")}

@GenericGenerator (name = "newGenerator" , strategy = "foreign" , parameters = { @Parameter (value = "studentInfo", name = "property")}

学生主键映射。似乎属性名称:student_info是错误的。