一。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关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
在Hibernate中,可以通过 `<many-to-one>` 或者 `<one-to-many>` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`<many-to-one>` 标签中包含了 `cascade` 属性的注释示例,但是...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...
标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...
<many-to-one name="childEntity" class="com.example.ChildEntity" cascade="all,delete-orphan" /> ``` 在这个例子中,父实体的`childEntity`属性将执行全部级联操作,包括添加、删除和更新,同时`delete-orphan`...
</many-to-one> ``` 或者使用注解: ```java // 在TCard类中 @ManyToOne(cascade = {CascadeType.ALL}) @JoinColumn(name = "person_id") private TPerson person; ``` 在这个例子中,`cascade="all"`或`CascadeType...
外键映射是通过在主表映射文件中使用`one-to-one`元素,而从表映射文件中使用`many-to-one`元素来实现。主键映射则是两个实体类的主键相互关联,这需要在`one-to-one`节点上设置`constrained`属性为`true`,以表明...
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
<one-to-many class="com.example.Employee"/> ``` 在"Employee"实体类的映射文件中,需要定义一个反向引用的引用,即`ManyToOne`类型,指定对应的部门ID字段。 ```xml <!-- Employee.hbm.xml --> <many-to-one ...
<one-to-many name="children" cascade="all,delete-orphan" /> ``` 或 ```java @OneToMany(cascade = { CascadeType.ALL }) ``` 二、Hibernate反转(Inverse) 反转主要用来解决关联关系的维护问题。在一对多...
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一(one-to-one)的关系。例如,A表与AA表是一对多关系,而A表与B表是一对一关系,B表与BB表也是一对多关系。 在Hibernate的映射...
在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...
标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...
【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...
</many-to-one> <!-- ... --> </hibernate-mapping> ``` 这里,`name`属性对应实体类中的属性名,`class`属性指定了关联实体的全限定类名,`fetch`属性可以设置为“join”以启用级联加载,而`column`元素则定义...
<one-to-many name="orders" class="com.fendou.domain.Order" cascade="all"/> <many-to-one name="user" class="com.fendou.domain.User"/> ``` 在这个例子中,`User` 实体与 `Order` 实体之间存在...