`
隐形的翅膀
  • 浏览: 497000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

映射一对多关系

 
阅读更多
1. 映射一对多的单向关联关系

订单和客户之间的关系
private Customer customer

order.hbm.xml
<many-to-one
	name="customer" 			//待映射的持久化类的属性名
	column="CUSTOMER_ID"			//设定和持久化类的属性对应的表的外键
	class="mypack.Customer			//属性类型
	not-null="true"/>			//如果为true,表示customer属性不允许为null,默认值为false



tx=session.beginTransaction();
Customer customer=new Customer("Tom");
session.save(customer);				//注释掉这行会出错,因为customer为临时对象,必须先持久化到数据库中

Order order1 = new Order("ID_001",customer);
session.save(order1)

即使将not-null设为false, 虽然上述代码能保存对象,但当Hibernate自动清理缓存中所有持久化对象时,会抛出新的异常

2. 级联保存

当Hibernate持久化一个临时对象时,在默认情况下,它不会自动持久化所关联的其它临时对象,可以把cascade属性设置为save-update,自动保存关联的临时对象
<many-to-one
	name="customer" 			//待映射的持久化类的属性名
	column="CUSTOMER_ID"			//设定和持久化类的属性对应的表的外键
	class="mypack.Customer			//属性类型
	cascade="save-update"
	not-null="true"/>			//如果为true,表示customer属性不允许为null,默认值为false


    tx=session.beginTransaction();  
    Customer customer=new Customer("Tom");  
    //session.save(customer);             //可以注释掉这行
      
    Order order1 = new Order("ID_001",customer);  
    session.save(order1)  

3. 映射一对多

客户和订单之间的关系

Hibernate 要求在持久化类中定义集合类型属性时,必须声明为接口类型 java.util.Set, java.util.Map java.util.List

a. 在映射一对多的双向关联时,应该在"one" 方把inverse属性设为true
b. 在建立两个对象的双向关联时,应该同时修改关联两端的对象的相应属性


private Set orders = new HashSet()

public Set getOrders(){
	return orders;
}

public void setOrders(Set orders){
	this.orders=orders;
}

Customer.hbm.xml

<Set name="orders"
	cascade="save-update" //=delete, =all-delete-orphan
	inverse="true"
	>
	<key column="CUSTOMER_ID"/>
	<one-to-many class="mypack.order/>
</set>


tx=session.beginTransaction();
Customer customer = new Customer("Tom" new HashSet());
Order order = new Order();
order.setOrderNumber("TOM_001");

[color=blue]//同时修改关联两端的对象的相应属性[/color]
[color=red]order.setCustomer(customer);
customer.getOrders().add(order);[/color]	

session.save(customer)


4. 级联删除,cascade=delete

5. 父子关系  cascade="all-delete-orphan"
分享到:
评论

相关推荐

    ibatis 一对多关系映射

    总的来说,理解并熟练运用Ibatis的一对多关系映射是优化数据访问效率,提高代码可读性和可维护性的重要技能。 在实际开发中,合理地使用Ibatis的一对多关系映射可以避免频繁的数据库查询,提高系统性能。同时,它也...

    映射多对多及一对一关系

    #### 一、多对多关系映射 在数据库设计中,当两个实体之间存在多对多的关系时,通常会使用一个关联表来维护这种关系。例如,在给定的例子中,`Employees`表和`Roles`表之间的关系即为多对多关系。 **映射示例:** ...

    ibatis 一对多 多对多完整映射

    **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多个订单。在iBATIS中,我们可以通过配置XML映射文件来实现这种关系。 1. **配置映射文件** 在`ibatis...

    JPA一对一,一对多,多对多关系映射

    **概念**:一对多关系表示一个实体可以与多个其他实体相关联,比如一个用户可以有多个订单。在数据库中,这通常通过在多方实体的表中添加外键实现。 **配置方式**: - 在一方实体上使用`@OneToMany`注解,表示一个...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中使用`@OneToMany`注解来实现。该注解定义了一个实体可以拥有多个其他实体的实例。例如,一个...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

    MyBatis关联映射代码

    `&lt;association&gt;`标签用于映射一对一关系,`&lt;collection&gt;`标签用于映射一对多关系。在查询用户时,MyBatis会根据ResultMap自动填充对应的`Address`对象和`Order`对象列表。 对于注解方式的关联映射,MyBatis也提供了...

    第十四章 Caché 定义和使用关系

    示例一对多关系示例主子关系示例连接对象方案1:更新一对多方案2:更新父子关系连接对象的最快方法删除关系删除对象关系使用关系SQL关系映射一对多关系的SQL映射父子关系的SQL映射建立多对多关系外键变化 ...

    MyBatis一对多映射

    3. 映射文件:在MyBatis的XML映射文件中,通过`&lt;association&gt;`标签定义一对多关系。`&lt;collection&gt;`子标签用于指定集合属性,`property`表示Java类中的字段名,`select`属性则是用来查询从表数据的SQL语句。 例如: ...

    hibernate关系映射网址

    ##### 3.1 一对多关系映射 一对多关系是指一个实体可以对应多个其他实体的情况。例如,一个部门可以有多个员工。这种情况下,我们通常会在“多”的一方设置外键指向“一”的一方。 ```xml ...

    hibernate关系映射

    一对多关系是指一个实体可以与多个其他实体关联。例如,一个部门可以有多个员工。在 Hibernate 中,通常通过 `@OneToMany` 或 `@ManyToOne` 注解来实现。 ##### 示例代码 ```java // Department.java @Entity ...

    SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)

    SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久层框架,它提供了强大的持久化功能,能够将 Java 对象与数据库表进行映射。在实际开发中,我们经常...

    MyBatis的关联映射

    ### 一对多关系映射 一对多关系常见于一个用户有多条订单的情况。在MyBatis中,可以使用`&lt;collection&gt;`标签来实现。同样有外键关联和主键关联两种方式,其基本原理与一对一关系类似,只是`&lt;collection&gt;`标签通常...

    MyBatis高级映射(一对多查询)

    在MyBatis的映射文件中,我们需要为一对一和一对多关系创建对应的XML元素。对于一对多关系,通常使用`&lt;association&gt;`或`&lt;collection&gt;`标签来定义。例如,假设我们有一个`Department`类和一个`Employee`类,一个部门...

    实现Mybatis框架中一对多关联映射的查询操作。

    这里会使用`&lt;resultMap&gt;`定义映射规则,`&lt;association&gt;`标签来处理一对多关系。 ```xml &lt;!-- 基本字段映射 --&gt; &lt;!-- 一对多关联映射 --&gt; SELECT * FROM User u JOIN Order_form o ON u.id =...

    MyBatis注解配置映射器:一对多关系的实现

    本文将深入探讨如何使用MyBatis的注解配置来实现一对多关系映射,以此来提高开发效率并减少代码冗余。 首先,我们需要理解一对多关系的概念。在数据库设计中,一对多关系表示一个表中的记录可以对应另一个表中的多...

    JPA一对多映射关系解析

    为了方便广大开发朋友的需要特整理一下有关jpa映射关系,希望可以帮助到一些朋友。

    Hibernate一对多,多对一映射

    在数据库设计中,一对多关系意味着一个父记录可以与多个子记录相关联。在Hibernate中,可以通过配置XML映射文件或使用注解来实现这种关系。例如,假设我们有`User`类和`Order`类,一个用户可以有多个订单,而一个...

    Hibernate一对多映射

    // 一对多关系的集合 private Set&lt;Order&gt; orders = new HashSet(); // getters and setters } public class Order { private Long id; private String orderNo; private User user; // getters and setters ...

Global site tag (gtag.js) - Google Analytics