2012-01-20 9 views
2

私はJPAの世界では新しく、次の問題があります。JPA @sequenceGenerate @OneToMany

私は、生成されたclassIdを持つクラスを持っています。このクラスには学生のリストがあり、この列の1つ(学生の場合)がclassIdです。

私はこれを実装しましたが、StudentテーブルのclassIdはデータベース内でnullと表示されます(それ以外は問題ありません)。

誰でも手助けできますか?

ありがとうございます。

これはコードです。

@Entity 
@Table(name = "class") 
public class Class implements Serializable { 

    private Long classId; 

    private List<Student> student; 

    @Id 
    @SequenceGenerator(name = "class_id_gen", sequenceName = "seq_class_id", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "class_id_gen") 
    @Column(name = "class_id", unique = true, nullable = false) 
    public Long getClassId() { 
     return classId; 
    } 

    @OneToMany(mappedBy = "class", cascade = CascadeType.ALL) 
    public List<Student> getStudent() { 
     return this.Student; 
    } 

} 

@Entity 
@Table(name = "student") 
public class Student implements Serializable { 

    /** 
    * The Class. 
    */ 
    private Class class; 

    @ManyToOne() 
    @JoinColumn(name = "class_id") 
    public Class getClass() { 
     return this.class; 
    } 

} 

Main: 

Class class = null; 

    UserTransaction.begin(); 

    class = new Class(); 

    class.setStudents(ListOfStudents); 

    EntityManager.persist(class); 

    UserTransaction.commit(); 

答えて

0

この質問は2日ごとに尋ねられます。この双方向協会のオーナー側は、がなく、mappedByという属性がある側です。これは、関係が存在するかどうかを知るためにHibernateが使用する側です。

アソシエーションの片面を初期化しましたが(clazz.setStudents(...))、この側は所有者側ではありません。だから、Hibernateは、連合主義者が動いていることを知りませんし、永続化しなければなりません。

あなたは他の側初期化する必要があります:所有者側:

for (Student s : listOfStudents) { 
    s.setClazz(clazz); 
} 
+0

おかげで多くのことを。それは動作します:D – JMarques

関連する問題