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作为外键。