一。mapping
这里使用两张表,分别为TBL_OSU_PRODUCTFILTERDETAIL_I和TBL_OSU_PRODUCTFILTER_I,前者为复合主键,后者与前者为一对多的关系。
1.TBL_OSU_PRODUCTFILTERDETAIL_I
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.netqin.function.osuproduct.filter.model.ProductFilterDeatil" table="TBL_OSU_PRODUCTFILTERDETAIL_I" schema="OSU_WORK">
<composite-id name="id" class="com.netqin.function.osuproduct.filter.model.ProductFilterDeatilId">
<key-many-to-one name="filter" entity-name="com.netqin.function.osuproduct.filter.model.ProductFilter" lazy="false">
<column name="PFDE_PRFIID_FK"></column>
</key-many-to-one>
<key-many-to-one name="product" entity-name="com.netqin.function.osuproduct.product.model.OsuProduct" lazy="false">
<column name="PFDE_PRDUID_FK"></column>
</key-many-to-one>
</composite-id>
<property name="pfdeOrder" type="java.lang.Long">
<column name="PFDE_ORDER" precision="10" scale="0" not-null="true" />
</property>
</class>
</hibernate-mapping>
说明:该表为复合主键,且每个字段与其它表为many-to-one关系,这样做方便在页面中直接使用关联对象,注意lazy="false"。
2.TBL_OSU_PRODUCTFILTER_I
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.netqin.function.osuproduct.filter.model.ProductFilter" table="TBL_OSU_PRODUCTFILTER_I" schema="OSU_WORK">
<id name="prfiId" type="java.lang.Long">
<column name="PRFI_ID" precision="10" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_OSU_PRODUCTFILTER_I</param>
</generator>
</id>
<property name="prfiBusiidFk" type="java.lang.String">
<column name="PRFI_BUSIID_FK" length="10" not-null="true" />
</property>
<set name="productFilterDetailes" cascade="all-delete-orphan" inverse="true" lazy="false">
<key column="PFDE_PRFIID_FK"/>
<one-to-many class="com.netqin.function.osuproduct.filter.model.ProductFilterDeatil"/>
</set>
</class>
</hibernate-mapping>
说明:这里说明即便是复合主键,也可以使用one-to-many只关联其中的一个字段。
二。操作方法
1.新增
ProductFilter pf = new ProductFilter();
pf.setPrfiBusiidFk(business[i]);
//筛选明细
for(int j=0;j<par.length;j++){
tem = par[j].split(",");//相应的子表属性,这里仅为举例
ProductFilterDeatil pfd = new ProductFilterDeatil();
ProductFilterDeatilId pfdfk = new ProductFilterDeatilId();//复合主键对象
OsuProduct product = (OsuProduct)dao.findById(OsuProduct.class, Long.parseLong(tem[0]));
pfdfk.setFilter(pf);
pfdfk.setProduct(product);
pfd.setId(pfdfk);//封装复合主键
pfd.setPfdeOrder(Long.parseLong(tem[2]));
pf.getProductFilterDetailes().add(pfd);
}
dao.save(pf );
2.修改和删除方法与many-to-one类似,不在赘述。
这里需要注意的是,复合主键是不能重复的,所以在新增或修改时需要做异常处理,或在前台做控制。
分享到:
相关推荐
Hibernate级联操作一对多demo Hibernate级联操作一对多demo Hibernate级联操作一对多demo
Hibernate的级联操作(增,删,该)
包括t_card主表和t_person从表,实现基于session和hql的hibernate级联增删改查;
Hibernate级联操作.docx
NULL 博文链接:https://hw1287789687.iteye.com/blog/2247386
关于Hibernate级联删除的问题.doc
hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。
inverse Hibernate_级联关系说明_-_关于cascade和inverse的用法
虽然Hibernate不怎么流行了不过有兴趣的可以看看
hibernate many-to-many级联保存,级联更新,级联删除
3.3、Hibernate级联关系(Av839011656,P3).mp4
第七章_Hibernate_-_级联策略 第七章
Hibernate 一对多、多对一、级联、加载、反转
用hibernate做的省市县三级级联,很具体,包你一看就会,其中包含ajax局部刷新;省市县所有数据台湾省的数据不全面,其他都配好了,只需要你整合一下即可运行。
Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单
Hibernate cascade (级联).docHibernate_cascade(级联).doc
struts+hibernate+ajax级联菜单struts+hibernate+ajax级联菜单
hibernate3.2级联关系自身一对多双向关联,适合初学者熟悉hibernate框架。
博文链接:https://llying.iteye.com/blog/220803