有两张表,其中 infoCenter表中有字段conference_key关联info_conference的主键
这样在JAVA中的InfoConference类中有private Set infoCenters这个属性了
我现在要更新这个infoCenters,一开始一直没成功,后来查了文档,把设置贴出来。。。
infoConference.hbm.xml:
<set
name="infoCenters"
lazy="false"
order-by="title desc"
cascade="all"
>
<key>
<column name="conference_key" />
</key>
<one-to-many
class="com.arvato.shlib.data.InfoCenter"
/>
</set>
原来我是cascade="all"这个没有加
InfoCenter.hbm.xml:
<many-to-one
name="infoConference"
class="com.arvato.shlib.data.InfoConference"
not-null="true"
>
<column name="conference_key" />
</many-to-one>
然后在程序里面更新是这么写:
Set<InfoCenter> infoCenters = new HashSet<InfoCenter>();
if (null != infos) {
for (int i = 0; i < infos.length; i++) {
InfoCenter infoCenter = infoCenterAccessor
.getInfoCenter(infos[i]);
if (null != infoCenter) {
infoCenters.add(infoCenter);
}
}
infoConference.getInfoCenters().clear();
infoConference.setInfoCenters(infoCenters);
}else{
infoConference.setInfoCenters(null);
}
infoConferenceAccessor.saveOrUpdate(infoConference);
原来的写法是没有
infoConference.getInfoCenters().clear();/*导致从前的数据没被清理*/