0

I am using OneToOne mapping to generate table in MySQL. I am getting NullPointerException during the execution.... I am using Hibernate 4.3.6.Final

Student.java - child class

    @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;
    }

}

Main class--

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 Msg

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 Answer 1

1

try to replace

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

with

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

of Student primary key mappting. It seems the property name:student_info is wrong.

Sign up to request clarification or add additional context in comments.

1 Comment

@Laurence....brilliant observation! I am breaking my head to figure out the problem since yesterday night. What you mentioned was also the part of the problem... However the NullPointerException is caused by a bug in the main method....before calling session.save(student); we have to add the following Integer rollNo = (Integer)session.save(studentInfo); //studentInfo is ParentClass student.setrollNo(rollNo); the reason for this is mentioned [link]stackoverflow.com/questions/7892571/… –

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.