mappedBy和JoinColumn,onetomany。

无论是onetomany,还是manytoone。都要设置级联关系(cascade),否则不会储存关联的数据。

@Entity
public class Clazzss {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    @OneToMany(cascade=CascadeType.ALL,mappedBy="id") 
@JoinColumn(name="clazz")
private Set<Student> students = new HashSet<Student>();
@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
Clazzss cla = new Clazzss();
        cla.setName("sss");
        Student student = new Student();
        student.setName("111");
        cla.getStudents().add(student);
        session.save(cla);
mappedBy用于放弃控制权:如上代码当储存cla时同时也储存student,但是不会有级联关系,同样的@JoinColumn也会失效。经测试mappedBy随便指向Student里的一个属性就可(原因未知);
如果mappedby指向的为string字段,不会生成外键约束(原因未知)
如果指向的为int字段,将生成外键约束
如果删掉mappedBy,在插入字段时将在Student表里自动生成一个字段clazz作为外键。
posted @ 2015-05-20 14:38  MRLL  阅读(613)  评论(0编辑  收藏  举报