2012-01-20 79 views
2

我是JPA世界的新手,我有以下问题。JPA @sequenceGenerate @OneToMany

我有一个类有一个生成的classId。这个类有一个学生列表,其中一列(在Student中)是classId。

我实现了这个功能,但Student Table的classId在数据库中显示为空(剩下的就可以了)。

任何人都可以帮忙吗?

在此先感谢。

这是代码。

@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

这个问题每两天要问一次。这种双向关联的所有者方是没有mappedBy属性的一方。这是Hibernate用来知道关系是否存在的一面。

您已初始化关联的一侧(clazz.setStudents(...)),但此端不是所有者端。所以Hibernate并不知道这个关联是必要的并且必须被持久化。

您必须初始化另一面:业主方:

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

非常感谢。它的工作原理:D – JMarques