2016-05-23 128 views
-3

我正在嘗試在Hibernate中通過註釋實現休眠一對一關聯的應用程序。我正在使用兩個POJO類並將它們彼此關聯,但在執行時我正面臨着這個問題。休眠一對一映射註解

代碼:我有2班學生,地址。我需要兩者之間的雙向1-1映射。

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

     @Id 
     @GeneratedValue 
     @Column(name = "STUDENT_ID") 
     private long id; 

     @Column(name = "FIRST_NAME") 
     private String firstName; 

     @OneToOne(mappedBy="student", cascade = CascadeType.ALL) 
     private Address address; 

     ----getters and setters--- 
    } 

    @Entity 
    @Table(name = "ADDRESS") 
    public class Address { 

     @Id 
     @Column(name="ADDRESS_ID") 
     @GeneratedValue(generator="gen") 
     @GenericGenerator(name="gen", strategy="foreign",[email protected](name="property", value="student")) 
     private long id; 

     @Column(name = "STREET") 
     private String street; 

     @Column(name = "CITY") 
     private String city; 

     @Column(name = "COUNTRY") 
     private String country; 

     @OneToOne 
     @PrimaryKeyJoinColumn 
     private Student student; 

     ----getters and setters--- 
    } 

下面是我的樣本主類

public class MainClass1 { 
     public static void main(String[] args) { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      Student student = new Student("Sam","Disilva","Maths"); 
      Address address = new Address("10 Silver street","NYC","USA"); 
      student.setAddress(address); 
      session.save(address); 
      session.save(student); 

      session.getTransaction().commit(); 
      HibernateUtil.shutdown(); 
     } 
    } 

異常跟蹤:

Initial SessionFactory creation failed.java.lang.NullPointerException 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.learn.main.HibernateUtil.buildSessionFactory(HibernateUtil.java:15) 
    at com.learn.main.HibernateUtil.<clinit>(HibernateUtil.java:8) 
    at com.learn.main.MainClass1.main(MainClass1.java:17) 
Caused by: java.lang.NullPointerException 
    at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1127) 
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1283) 
    at com.learn.main.HibernateUtil.buildSessionFactory(HibernateUtil.java:12) 
    ... 2 more 
+0

請添加代碼。 –

+0

並且還添加了一個問題陳述... – meskobalazs

+0

在我上面的問題中添加了代碼 – Ajay

回答

0

首先,嘗試改變對Address部分@OneToOne映射。

@Entity 
@Table(name = "ADDRESS") 
public class Address { 

    @OneToOne 
    @JoinColumn(name = "fk_student") 
    private Student student; 

}