inverse

inverse是反转的意思,在Hibernate中inverse决定谁掌有控制权,即表之间的关系谁来维护,那么当inverse="true"表示 交出控制权,inverse="false"表示不交出控制权,首先来看实例,在Parent.hbm.xml中有这样的描述:

...

首先说明这个映射文件是描述Parent类的,那么set描述的是Child集合,inverse="true"意为交出控制权,整体意思就是Parent 把控制权交给了Child,也就是说由Child来维护表关系。如果inverse="false"表示不交出控制权,那么当然由Parent自己来维护 表关系了,值得提到的是在Child映射文件中没有提到由谁来控权,默认的是inverse="false",就是由自己控权,即Child,进一步说当 Parent那边inverse="false"不交控权的时候,实际上是两个类都有责任来维护表关系。说到这里可能会问到底控权维护表关系是什么意思 呢?下面来看测试类代码:
Parent p=new Parent();
Child c1=new Child();
p.setPname("xpc5");
c1.setCname("cloud");
c1.setParent(p);
p.getChilds().add(c1);
session.save(p);
这样写无论谁负责维护数据插入都没问题,那么我们改动一下试试,现在由Child负责维护,c1.setParent(p)是Child类与Parent类 关联的关键,那么把句注释掉再试试,运行后执行语句是一样的,但是查看表记录你会发现Parent表能正确插入记录,而Child表中pid字段为空,这 正是因为c1.setParent(p)这句是Child与Parent关联的关键而你又把它

你可能感兴趣的:(hibernate,Hibernate,XML)