`
hanqunfeng
  • 浏览: 1543613 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate级联实践之二(many-to-one)

阅读更多

一。mapping

这里使用两张表,分别是TBL_OSU_PRODUCT_I和TBL_OSU_PRODUCTMESSAGE_I,前者与后者是一对多的关系,映射文件如下:

1.TBL_OSU_PRODUCT_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.product.model.OsuProduct" table="TBL_OSU_PRODUCT_I" schema="OSU_WORK">
<id name="id" type="long">
<column name="PRDU_ID" precision="10" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_OSU_PRODUCT_I</param>
</generator>
</id>
<property name="prduName" type="string">
<column name="PRDU_NAME" length="200" not-null="true" />
</property>
<property name="prduDescription" type="string">
<column name="PRDU_DESCRIPTION" length="200" />
</property>


<set name="productMessage" cascade="all-delete-orphan" inverse="true" lazy="false">
<key column="PRME_PRDUID_FK"/>
<one-to-many class="com.netqin.function.osuproduct.productmessage.model.ProductMessage"/>
</set>


</class>
</hibernate-mapping>

说明:cascade="all-delete-orphan":级联删除、修改和更新; inverse="true":控制权交给对方,既新增或修改时,ProductMessage需要明确指定对OsuProduct的关联;

lazy="false":一并加载子表,方便页面展示(该属性可以根据实际情况制定);<key column="PRME_PRDUID_FK"/> :子表中关联主表的字段名称

2.TBL_OSU_PRODUCTMESSAGE_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.productmessage.model.ProductMessage" table="TBL_OSU_PRODUCTMESSAGE_I" schema="OSU_WORK">
<id name="prmeId" type="java.lang.Long">
<column name="PRME_ID" precision="10" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_OSU_PRODUCTMESSAGE_I</param>
</generator>
</id>

<property name="prmeMecoidFk" type="java.lang.Long">
<column name="PRME_MECOID_FK" precision="10" scale="0" not-null="true" />
</property>

<many-to-one name="product"
class="com.netqin.function.osuproduct.product.model.OsuProduct">
<column name="PRME_PRDUID_FK" />
</many-to-one>


</class>
</hibernate-mapping>

说明:配置比较简单。

二。使用方法

主表操控子表方法:

1.新增:

String[] messageContentId = request.getParameterValues("messageContentId");//提示语主题ID

//提示语
if(messageContentId!=null&&messageContentId.length>0){
for(int i=0;i<messageContentId.length;i++){
ProductMessage pm = new ProductMessage();
pm.setPrmeMecoidFk(Long.parseLong(messageContentId[i]));
pm.setProduct(object);//因为是inverse="true",所以需要子表指定主表对象
object.getProductMessage().add(pm);//这个步骤不能省,否则不能级联保存子表
}
}

dao.save(object);//object为主表对象,可以通过new得到

2.修改:

OsuProduct object_tem = this.findById(object.getId());//从数据库中取到主表对象

object_tem.getProductMessage().removeAll(object_tem.getProductMessage());//清空提示语,先清空在添加

String[] messageContentId = request.getParameterValues("messageContentId");//提示语主题ID
//提示语
if(messageContentId!=null&&messageContentId.length>0){
for(int i=0;i<messageContentId.length;i++){
ProductMessage pm = new ProductMessage();
pm.setPrmeMecoidFk(Long.parseLong(messageContentId[i]));
pm.setProduct(object_tem);
object_tem.getProductMessage().add(pm);
}
}

//将页面传递过来的数据copy到持久对象中
copyProject(object_tem, object);

dao.update(object_tem);//关于主表的其余属性的修改可以应用一个copy方法

copy方法:

private void copyProject(OsuProduct dest, OsuProduct sour) {
dest.setPrduDescription(sour.getPrduDescription());// 描述
}

3.删除

删除主表即可

dao.delete(object);

分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在Hibernate中,可以通过 `&lt;many-to-one&gt;` 或者 `&lt;one-to-many&gt;` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`&lt;many-to-one&gt;` 标签中包含了 `cascade` 属性的注释示例,但是...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    Hibernate的级联操作(增,删,该)

    &lt;many-to-one name="childEntity" class="com.example.ChildEntity" cascade="all,delete-orphan" /&gt; ``` 在这个例子中,父实体的`childEntity`属性将执行全部级联操作,包括添加、删除和更新,同时`delete-orphan`...

    hibernate级联增删改查

    &lt;/many-to-one&gt; ``` 或者使用注解: ```java // 在TCard类中 @ManyToOne(cascade = {CascadeType.ALL}) @JoinColumn(name = "person_id") private TPerson person; ``` 在这个例子中,`cascade="all"`或`CascadeType...

    Hibernate的缓存级联查询

    外键映射是通过在主表映射文件中使用`one-to-one`元素,而从表映射文件中使用`many-to-one`元素来实现。主键映射则是两个实体类的主键相互关联,这需要在`one-to-one`节点上设置`constrained`属性为`true`,以表明...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Spring+Hibernate一对多关联映射---部门与员工表的级联添加

    &lt;one-to-many class="com.example.Employee"/&gt; ``` 在"Employee"实体类的映射文件中,需要定义一个反向引用的引用,即`ManyToOne`类型,指定对应的部门ID字段。 ```xml &lt;!-- Employee.hbm.xml --&gt; &lt;many-to-one ...

    hibernate 级联(cascade和inverse)一对多

    &lt;one-to-many name="children" cascade="all,delete-orphan" /&gt; ``` 或 ```java @OneToMany(cascade = { CascadeType.ALL }) ``` 二、Hibernate反转(Inverse) 反转主要用来解决关联关系的维护问题。在一对多...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    关于Hibernate级联删除的问题.doc

    在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一(one-to-one)的关系。例如,A表与AA表是一对多关系,而A表与B表是一对一关系,B表与BB表也是一对多关系。 在Hibernate的映射...

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    hiberante - one to many - update

    标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...

    hibernate-one-to-many-uni

    【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...

    hibernate 关联映射(一) many to one

    &lt;/many-to-one&gt; &lt;!-- ... --&gt; &lt;/hibernate-mapping&gt; ``` 这里,`name`属性对应实体类中的属性名,`class`属性指定了关联实体的全限定类名,`fetch`属性可以设置为“join”以启用级联加载,而`column`元素则定义...

    Hibernate cascade (级联).doc

    &lt;one-to-many name="orders" class="com.fendou.domain.Order" cascade="all"/&gt; &lt;many-to-one name="user" class="com.fendou.domain.User"/&gt; ``` 在这个例子中,`User` 实体与 `Order` 实体之间存在...

Global site tag (gtag.js) - Google Analytics