以下为项目开发中总结:
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 为非延迟加载
相关推荐
在Nhibernate中,一对...总结来说,Nhibernate中的一对多级联保存和双向映射是用于管理复杂对象关系的重要特性。通过恰当的注解配置,可以实现父对象与子对象的自动保存和关系导航,简化了ORM的使用,提升了开发效率。
3. **级联操作**:级联是指当对一个实体进行某些操作(如保存、删除)时,这些操作会自动传播到与其关联的其他实体。例如,如果我们设置级联类型为`CascadeType.ALL`,那么删除一个用户时,与之关联的所有订单也会被...
综上所述,"Hibernate-基础联表模板"涵盖了Hibernate中关于联表查询的基础知识,包括各种查询方式、关联关系的定义、Fetch策略以及查询结果的处理等,是开发者进行数据库操作的有力助手。通过这个模板,开发者可以...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...
hibernate联级操作
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...
Session 提供了开始和结束事务的方法,以及保存、更新、删除和查询对象的接口。 **CRUD 操作** 1. **创建(Create)**:使用 Session 的 `save()` 或 `persist()` 方法保存新对象到数据库。 2. **读取(Read)**:...
`org.hibernate.persister.collection.AbstractCollectionPersister`和`org.hibernate.action.internal.CollectionRemoveAction`等类是处理多对多关联删除的关键。通过阅读源码,我们可以了解到Hibernate如何处理...
【标题】:“hibernate和spring技术难点及其要点总结” 【描述】:“hibernate和spring技术难点及其要点总结” 本文将深入探讨Hibernate和Spring框架在Java开发中的关键概念、应用场景以及技术难点。首先,我们来...
对于更新和删除操作,可以使用`scroll()`方法,这在Hibernate 2.1.6或更高版本中是支持的。`scroll()`方法返回一个`ScrollableResults`对象,允许我们以游标方式处理结果集,这在处理大量数据时非常有效。同样,我们...
《Hibernate4总结文档》 Hibernate4作为一款强大的Java对象关系映射框架,简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库层面的细节。本文将深入探讨Hibernate4的配置和使用,帮助开发者更好地理解...
总结,Hibernate的级联和反转特性对于一对多关系的管理至关重要,它们可以简化开发过程,提高数据操作的效率。通过合理配置,可以确保对象关系的正确同步,并利用JUnit进行测试以确保功能的正确性。在实践中,应根据...
1. Session:是Hibernate的主要工作单元,负责保存、更新和删除对象,以及执行HQL(Hibernate查询语言)。 2. Transaction:处理数据的原子性,确保一组操作要么全部成功,要么全部失败。 **五、CRUD操作** 1. 插入...
Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...