用Hibernate做持久层的时候,在保存一对多关系的数据的时候,把主表端的inverse设为true,在JAVA对象里把关联做成双向,一次保存主表,效率最高.
下面以往主表保存一条数据,子表保存两条数据为例:
1,通过保存主表的方式,inverse设为true,JAVA对象做双向关联,通过跟踪Hibernate的SQL,发现一共有三次insert操作.
如果不将子表方关联到主表方(将子表JAVA对象加到主表的set里),子表里不会插入数据,只产生1条插入主表的SQL.
如果不将主表方关联到子表方(将主表JAVA对象赋值到子表对象的对应属性),同样有三次insert操作,但是子表的外键值为空.
需要设置主表的mapping文件:
<set name="detailtbs" inverse="true" lazy="true" table="DETAILTB" cascade="all-delete-orphan" fetch="select">
<key>
<column name="MID" precision="22" scale="0" />
</key>
<one-to-many class="com.test.Detailtb" />
</set>
MasttbHome masttbHome = new MasttbHome();
Masttb masttb = new Masttb();
masttb.setMid(new BigDecimal(1));
masttb.setMastinfo("mastinfo");
//如果不如下那样把主表对象关联到子表JAVA对象,子表的外键会为空
Detailtb detailtb1 = new Detailtb(new BigDecimal(1),masttb,"detailinfo1");
Detailtb detailtb2 = new Detailtb(new BigDecimal(2),masttb,"detailinfo2");
//如果不把子表的对象加入到主表的set里,不会插入子表数据.
masttb.getDetailtbs().add(detailtb1);
masttb.getDetailtbs().add(detailtb2);