cascade很好理解,就是对表进行增,删,改(查询与它无关)的时候对级联表进行操作,简单的来就是session.save(),session.delete()或者sesison.update()对一个表进行操作时,也会跟它有外键的表产生影响。
cascade属性的可选值:
all :所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
inverse
网上关于inverse的理解大都是决定主表还是从表维护关系,但这实在有点抽象,经过进行实验观察sql语句终于有了一些理解。
inverse有两种属性:
false与true;理解就一句话,谁设置了谁就要维护表的关系。举一个例子:对于<one-to-many>的双向关联情况,<one-to-many inverse="true"/>代表主控权不在"一"端这方,而在“多”端的那一方,反之则是主控权在“多”端那一方。
下面通过举例子来探究主控权在哪一方会出现什么不同。
这里先给出结论:主控权在哪里所影响的sql语句的不同,从而影响了结果。本文的重点就是探究怎么影响结果!
实验环境: <one-to-many>一对多的双向关系(也可以看成是多对一的双向关系)
表: user: