2016-05-23 6 views
-3

アノテーションによるハイバネート1対1の関連付けを実装するアプリケーションをHibernateで試行しています。私は2つのPOJOクラスを使用してお互いに関連付けていますが、実行時にはこの問題に直面しています。アノテーションによる1対1のマッピングのハイバネーション

コード: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; 

} 
関連する問題