以下为项目开发中总结:
hibernate一对多级联保存及删除:
采购单表头及单据行信息保存
1. 采购单表头对象 ("一方" 对象)
//采购单表头:(一方)
public class PssBuyHead implements java.io.Serializable {
private Integer buyid;
private PssDepot pssDepot;
private PssSupplier pssSupplier;
private TSysUser TSysUser;
private String buynum;
private String buybills;
private Date buydate;
private String buydes;
private Integer buytotal;
private String isok;
private String buytype;
private Date createdate;
private Integer createpeople;
private Integer sumnum;
private Float sumprice;
private Set<PssBuyLine> pssBuyLines = new HashSet<PssBuyLine>(0);
(get...set...方法省略)
采用set集合对行信息的关联
private Set<PssBuyLine> pssBuyLines = new HashSet<PssBuyLine>(0);
采购单行信息对象 ("多方"对象)
public class PssBuyLine implements java.io.Serializable {
private Integer productlinid;
private PssBuyHead pssBuyHead;
private String productbm;
private String productname;
private String standard;
private String unit;
private Integer productsum;
private Float inprice;
private Float buysummoney;
private String product;
private String productnum;
private String productdes;
(get... set ...)
头信息对象
private PssBuyHead pssBuyHead;
2. 映射对象 .hbm.xml对象
"一方" 采购单头信息
<hibernate-mapping>
<class name="com.business.buy.pojo.PssBuyHead" table="pss_buy_head">
<id name="buyid" type="java.lang.Integer">
<column name="BUYID" precision="8" scale="0"/>
<generator class="increment"/>
</id>
<many-to-one name="pssDepot" class="com.business.base.pojo.PssDepot" lazy="false" fetch="select">
<column name="DEPOTID" precision="8" scale="0">
<comment>仓库代码</comment>
</column>
</many-to-one>
<many-to-one name="pssSupplier" class="com.business.base.pojo.PssSupplier" lazy="false" fetch="select">
<column name="SUPPLIERID" precision="8" scale="0">
<comment>供应商代码</comment>
</column>
</many-to-one>
<many-to-one name="TSysUser" class="com.popedom.dyhx.pojo.TSysUser" lazy="false" fetch="select">
<column name="USERID" precision="8" scale="0">
<comment>用户ID</comment>
</column>
</many-to-one>
<property name="buynum" type="java.lang.String">
<column name="BUYNUM" length="20" />
</property>
<property name="buybills" type="java.lang.String">
<column name="BUYBILLS" length="20" />
</property>
<property name="buydate" type="java.util.Date">
<column name="BUYDATE" length="19" />
</property>
<property name="buydes" type="java.lang.String">
<column name="BUYDES" length="40" />
</property>
<property name="buytotal" type="java.lang.Integer">
<column name="BUYTOTAL" />
</property>
<property name="isok" type="java.lang.String">
<column name="ISOK" length="10" />
</property>
<property name="buytype" type="java.lang.String">
<column name="BUYTYPE" length="10" />
</property>
<property name="createdate" type="java.util.Date">
<column name="CREATEDATE" length="19" />
</property>
<property name="createpeople" type="java.lang.Integer">
<column name="CREATEPEOPLE" />
</property>
<property name="sumnum" type="java.lang.Integer">
<column name="SUMNUM" />
</property>
<property name="sumprice" type="java.lang.Float">
<column name="SUMPRICE" precision="10" />
</property>
<set name="pssBuyLines" inverse="false" lazy="false" cascade="all">
<key>
<column name="BUYID" precision="8" scale="0" />
</key>
<one-to-many class="com.business.buy.pojo.PssBuyLine" />
</set>
</class>
</hibernate-mapping>
"一"方关联"多方"对象
<set name="pssBuyLines" inverse="false" lazy="false" cascade="all">
<key>
<column name="BUYID" precision="8" scale="0" />
</key>
<one-to-many class="com.business.buy.pojo.PssBuyLine" />
</set>
采购单行信息(“多方”)
<hibernate-mapping>
<class name="com.business.buy.pojo.PssBuyLine" table="pss_buy_line">
<id name="productlinid" type="java.lang.Integer">
<column name="PRODUCTLINID" precision="8" scale="0"/>
<generator class="increment"/>
</id>
<many-to-one name="pssBuyHead" class="com.business.buy.pojo.PssBuyHead" fetch="select">
<column name="BUYID" precision="8" scale="0" />
</many-to-one>
<property name="productbm" type="java.lang.String">
<column name="PRODUCTBM" length="20" />
</property>
<property name="productname" type="java.lang.String">
<column name="PRODUCTNAME" length="30" />
</property>
<property name="standard" type="java.lang.String">
<column name="STANDARD" length="20" />
</property>
<property name="unit" type="java.lang.String">
<column name="UNIT" length="8" />
</property>
<property name="productsum" type="java.lang.Integer">
<column name="PRODUCTSUM" />
</property>
<property name="inprice" type="java.lang.Float">
<column name="INPRICE" precision="10" />
</property>
<property name="buysummoney" type="java.lang.Float">
<column name="BUYSUMMONEY" precision="10" />
</property>
<property name="product" type="java.lang.String">
<column name="PRODUCT" length="20" />
</property>
<property name="productnum" type="java.lang.String">
<column name="PRODUCTNUM" length="20" />
</property>
<property name="productdes" type="java.lang.String">
<column name="PRODUCTDES" length="30" />
</property>
</class>
</hibernate-mapping>
"多方"关联"一方"对象
<many-to-one name="pssBuyHead" class="com.business.buy.pojo.PssBuyHead" fetch="select">
<column name="BUYID" precision="8" scale="0" />
</many-to-one>
(以上代码调试通过)
总结: 1,一对多关联;
2,“一”方维护关系;(inverse="false" lazy="false" cascade="all")
3;级联操作并删除孤儿;
(inverse,cascade不能再“多”方的配置文件<many-to-one.../>中配置)
-----配置文件相关配置参数说明-----
cascade:级联,可选值为:none,save-update,delete,all,all-delete-orphan
inverse: 反转,表示由哪方维护关系false为自己维护,可选值:true,false
lazy: true/false ; false 为非延迟加载

本文介绍使用Hibernate实现一对多关系的级联保存与删除,包括采购单表头与单据行信息的具体实现方法。
462

被折叠的 条评论
为什么被折叠?



