https://www.cnblogs.com/fuyaozhishang/p/10166890.html
@OneToMany(fetch=FetchType,cascade=CascadeType)
@OneToMany描述一个一对多的关联,该属性应该为集合类型,在数据库中并没有实际字段.
fetch:表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.
cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新或删除
- CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法
- CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据
- CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法
- CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法
- CascadeType.ALL:全部所有
大多数情况用CascadeType.MERGE就能达到级联跟新又不报错,用CascadeType.ALL时要斟酌下CascadeType.REMOVE
optional 是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true
mappedBy只有在双向关联时,才会使用这个属性,
mappedBy="另一方的关系引用属性",
这个属性默认为空,代表一方要维护关系。如果mappedBy设置为一方对象的值,如mappedBy = “user”,代表一方放弃维护关系,具体表现就是在插入或者删除操作的时候,一方不会去update多方的外键joinColumns属性表示在保存关系中的表中,所保存关联关系的外键的字段。并配合@JoinColumn标记使用。
- orphanRemoval属性https://blog.csdn.net/liyiming2017/article/details/90613707如果javaBean中父实体和子实体之间有一对一或一对多的级联关系的时候,如果我们想要删除父实体,也必须要级联删除子实体,需要被删除的级联关系中的子实体则被称为孤儿实体。orphanremoval属性的主要作用就是标记是否可以删除孤儿实体,
https://blog.csdn.net/liyiming2017/article/details/90218062
cascade = CascadeType.REMOVE 与 orphanRemoval = true: 理解断开关系和删除操作