lazy,就是延时加载。
以最简单的parent和child为例子:一个parent可以有多个child,一个child只有一个parent。
当parent类的child属性的lazy为true,那么当select parent的时候,他的child不会马上被select,一直延迟到他的child需要被读写的时候再去select。
当parent类的child属性的lazy为false,那么select parent的时候,他的child会马上被select。
inverse,用于外键维护的控制。
当inverse为false,则在插入表数据之后,会再插入外键维护的记录。
当inverse为true,则在插入表数据的同时,插入外键维护的记录。
在非多对多的表关系中:
还是以parent和child为例子。假设1个parent有3个child,那么:
当inverse为false,则先insert 1 条 parent,再insert 3 条 child,再insert 3 个child的parent ID,一共7次insert。
当inverse为true,则先insert 1 条 parent,再insert 3 条 child,当然这3次insert是同时完成插入parent ID的,所以一共4次insert。
总结:在非多对多的表关系中,inverse永远为ture。
在多对多的表关系中:
中间表的外键维护通常由一方进行维护。
所以2个多方,1个inverse为ture,1个inverse为false。中间表会由inverse为false的一方维护。
总结:选择数据比较多的一方维护中间表的效率会比较高。
08-24
08-24