1.
一对多,多对一,多的一方肯定会维护关系,一的一方只有在创建了关系才会维护,下面是关系的维护代码
delete 删除了该对象的数据,和该对象的另一个表的外键置为null,
删除的是含有外键的表,就直接删除该条记录
一对多,多对一,使用级联操作
解决双方维护关系
delete方法有两种情况
1.不维护关系。外键置为null,或者是删除了含有外键的表的数据
2.级联删除。删除表中的记录(级联删除)
多对多
普通,双方维护(双方都维护中间表数据),操作两张表
级联:操作三张表
维护:一方维护中间表,操作两张表
级联不维护关系
维护
save()需要返回一个Serialzable的实现类,因此执行这个方法时会马上插入到数据库,而persist()不会立即插入到数据库。
"当我们封装一个长会话流程的时候,persist()方法就显得尤为重要了!"
用于保存临时对象
session.merge ()方法
该方法将修改表中记录,其所需要的实体状态为脱管状态,但是注意,它并不影响调用方法前后的状态,也即该实体依然是脱管状,
session.merge()方法会首先发送一句select语句,去数据库端获取UserInfo持久化标识所对应的表记录;然后自动生成一个持久化状态的UserInfo实体,与脱管状态的UserInfo实体做比较是否有所改变;一旦发生了改变,才会发送update语句执行更新。而按执行顺序,若两句session.merge()方法针对同一个脱管状态的UserInfo实体,那其结果只会执行最后一个session.merge()方法所发出的update语句。即使执行了session.merge()方法,UserInfo实体依然是脱管状态,因此第一个UserInfo实体的语句不会同步数据库中的表。
findByExample
findByExample只为example中的基本类型属性生效,如果example的属性中有bean的话(一般有外键时就会出现了)就会无法转成SQL查询条件
findByProperty