网上参考资料很多,但总是不符合自身习惯,遂记录下来。
一对多的关系
如class与student的关系
class中
@OneToMany(mappedBy = "class") @LazyCollection(LazyCollectionOption.EXTRA) @Cascade(value = {CascadeType.ALL}) private set<Student> students = new HashSet<Student>();
@OnetoMany 关系申明,一个class对应多个学生,配置mappedby的为由多的一方(class)来维护关联关系,如班级不在了,学生肯定不在了。(如果没有配置谁来维护,系统会给我们创建一张中间表,可以验证)
@LazyCollection(LazyCollectionOption.EXTRA) ---> LazyCollection属性设置成EXTRA指定了当如果查询数据的个数时候,只会发出一条 count(*)的语句,提高性能
@Cascade 为配置何时进行关联操作,具体的一些取值如下
all: 所有情况下均进行关联操作,即save-update和delete。 none: 所有情况下均不进行关联操作。这是默认值。 save-update: 在执行save/update/saveOrUpdate时进行关联操作。 delete: 在执行delete 时进行关联操作。 all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点。 比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个book时, 此book即成为孤儿节点。
注:在声明多的一方时要及时初始化
student中
@ManyToOne(fetch = FetchType.LAZY) private Clazz clazz;
@ManyToOne 声明多对一关系,fetch表示延迟加载,就是在查询class时,不会立即就把学生查找出来。
注:1的一方不能初始化。
其他多对多,一对一有机会用到更新