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

hibernate的一对多关系

阅读更多
Customers表(一) 对 Orders表(多)
1.那么Orders表中就有Customers表的主键,也就是说Orders表的外键是

Customers表的主键
2.打开Orders表对应的VO:AbstractOrders.java文件,删除外键(Customers表

的主键)的Set(),Get()方法
3.创建一个类型为Customers对象的属性
4.配置Orders.hbm.xml映射文件。将 将<property name="customerId"

column="CUSTOMER_ID" type="java.lang.Long" />
       改为<many-to-one name="customers" column="CUSTOMER_ID"

class="com.Customers"  not-null="true" />

2---4步 MyEclipse4已经为我们全部自动生成!!!不用自己设置!





一对多双关联关系:
1。修改 Customers 对像(AbstractCustomers.java文件)增加一 orders 属性,

代码如下:private Set orders = new HashSet();跟Set(),Get()方法;
2、修改配置映射文件(Customers.hbm.xml)
在<property...>后面跟</class>前面加上
<set 
   name="orders"
   cascade="save-update">
   <key column="CUSTOMER_ID" />
   <one-to-many class="com.Orders" />
  </set>





级联保存

原文件内容:
<many-to-one 

                            name="customers" 

                            column="CUSTOMER_ID" 

                            class="com.Customers"

               not-null="true" />

       修改为: 绿色字体部份为增加之处

                    <many-to-one 

                            name="customers" 

                            column="CUSTOMER_ID" 

                            class="com.Customers"

                            cascade="save-update"

               not-null="true" />


//session.save(customers);  将此部份将关闭









映射一对多双关联关系

1。修改 Customers 对像(AbstractCustomers.java文件)

增加一 orders 属性,代码如下:

private Set orders = new HashSet();

这样配置以后如果要查询 Customers 所对应的所有 Orders 对像,只需要调用customer.getOrders()方法。

2。修改配置映射文件(Customers.hbm.xml)

        源文件片断:(绿色字体为新增部份)

   <class name="Customers" table="customers">

        <id name="id" column="ID" type="java.lang.Long">

            <generator class="increment"/>

        </id>

 

        <property name="name" column="NAME" type="java.lang.String" />

        <property name="age" column="AGE" type="java.lang.Integer" />

       

       <set 

           name="orders"

           cascade="save-update">

           <key column="CUSTOMER_ID" />

           <one-to-many class="com.Orders" />

       </set>

      </class>



MyEclipse已经为我们建立好第一跟第二步了,只需在第二步加上cascade="save-update"属性就行了!

3。修改 Orders 对你的 equals 和 hashCode 方法



public int hashCode() {

       if (this.hashValue == 0) {

           int result = 17;

           int idValue = this.getId() == null ? 0 : this.getId().hashCode();

           result = result * 37 + idValue;

           idValue = this.getOrderNumber() == null ? 0 : this.getCustomers()

                  .hashCode();

           result = result * 37 + idValue;

           idValue = this.getPrice() == null ? 0 : this.getPrice().hashCode();

           result = result * 37 + idValue;

           idValue = this.getCustomers() == null ? 0 : this.getCustomers()

                  .hashCode();

           result = result * 37 + idValue;

           this.hashValue = result;

       }

       return this.hashValue;

    }

 

    public boolean equals(Object rhs) {

       if (rhs == null)

           return false;

       if (!(rhs instanceof Orders))

           return false;

       Orders that = (Orders) rhs;

       if (this.getId() != null && that.getId() != null) {

           if (!this.getId().equals(that.getId()))

              return false;

           if (!this.getOrderNumber().equals(that.getOrderNumber()))

               return false;

           if (!this.getPrice().equals(that.getPrice()))

              return false;

           if (!this.getCustomers().equals(that.getCustomers()))

              return false;

       }

       return true;

    }



在这里修改 equals 和 hashCode 方法的目的是为了使用Orders orders1 = new Orders()方法时和 Orders orders2 = new Orders() 创建的这两个 Orders 对你为两个不同的对像,如果不增加这几个判断,当创建新的 Orders 对像时,因为 Orders对像的 ID属性值为 null ,当创建第二个 Orders对像时,它的 ID属性值也为 null,hibernate 会将它们认为是同一个对像,当执行session.save()方法时只会保存一个orders对像。





级联查询、级联修改、级联删除都有一个参数“customer_id”可以指定将要查询的Customers对像的ID值

     

      修改 Customers.hbm.xml 文件,绿色字体就修改部份

       <set 

           name="orders"

           cascade="all-delete-orphan"

           inverse="true">

           <key column="CUSTOMER_ID" />

           <one-to-many class="com.Orders" />

       </set>




   cascade="all-delete-orphan"这一设定值代表可以执行所有有联级方法,如保存、删除
分享到:
评论
1 楼 huxiuliang 2007-08-14  

相关推荐

    hibernate一对多关系

    在这个"hibernate一对多关系"的资源中,我们主要探讨的是Hibernate如何处理一个实体类与多个实体类之间的关联关系。 在数据库设计中,一对多关系是非常常见的一种关系类型,比如一个部门可以有多个员工,一个学生...

    hibernate一对多项目

    在JavaEE开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化...通过分析这些代码,你将能更好地掌握Hibernate一对多关系的配置和使用。同时,也可以尝试修改配置或业务逻辑,以加深理解和应用。

    hibernate一对多实例

    描述中的链接指向了一篇由“fangguanhong”在iteye博客上发表的文章,虽然具体内容没有提供,但我们可以根据标题推测该文章可能详细讲解了一个具体的Hibernate一对多关系的实现步骤和示例代码。 在Java的Hibernate...

    hibernate 一对多

    一、Hibernate一对多关系概述 在数据库设计中,一对多关系意味着一个表(父表)中的记录可以与另一个表(子表)中的多个记录相对应。例如,一个学生可以有多个课程,而一门课程可以被多个学生选修。在Hibernate中,...

    hibernate之一对多配置demo

    一、Hibernate一对多关系 在现实世界中,一对多关系很常见,例如一个班级可以有多名学生。在数据库中,这对应于一个表(如班级表)有一条记录可以关联多条记录(如学生表)。在Hibernate中,我们通过配置XML文件来...

    Hibernate_一对多增删改查数据

    《Hibernate一对多关系的数据操作详解》 在Java的持久化框架Hibernate中,关系映射是其核心特性之一,尤其是一对多(One-to-Many)关系的处理,它广泛存在于现实世界的业务场景中,如一个用户可以有多个订单,一个...

    hibernate一对多例子

    ### Hibernate一对多关系详解 #### 一、理解一对多关系 在数据库设计中,一对多(One-to-Many)是一种常见的关联方式,指的是一个表中的记录可以与另一个表中的多个记录建立联系。例如,在学生与书籍的关系中,一...

    Hibernate一对一,一对多,多对多实例

    例如,Class实体和Student实体的一对多关系: ```java @Entity public class Class { @OneToMany(mappedBy = "class") private List&lt;Student&gt; students; } @Entity public class Student { @ManyToOne ...

    hibernate一对多案例

    本案例主要探讨的是Hibernate中的一对多关系映射,这是一种常见的对象关系映射(ORM)配置,用于表示一个实体与多个其他实体之间的关联。 在传统的数据库设计中,一对多关系是指一个表(父表)中的记录可以与另一个...

    Hibernate关于注解的一对多,多对多,一对一

    ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们可以使用`@OneToMany`注解来表示这种关系。 1. **@OneToMany** 注解:这个...

    hibernate一对多代码

    本文将详细解析"hibernate一对多映射"的概念、配置及其实现过程,以帮助理解并掌握这一核心特性。 首先,我们要明白在关系型数据库中,"一对多"关系意味着一个实体(比如一个部门)可以有多个相关实体(如部门下的...

    hibernate一对一关联关系

    在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...

    Hibernate ORM - 一对多双向关联关系

    这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...

    hibernate一对多与多对一

    本篇文章将详细讲解"hibernate一对多与多对一"的关系映射概念,以及如何在实际开发中进行配置和使用。 首先,我们来看一下“一对多”关系。在现实世界中,这种关系可以对应到例如一个班级有多个学生,或者一个人...

    Hibernate双向一对多经典实例

    本实例将聚焦于Hibernate中的一对多关系,这是一种常见的关联类型,尤其是在处理具有层次结构的数据时。双向一对多关系意味着一个实体可以拥有多个相关联的实体,同时每个相关联的实体也可以回指到原始实体。 **...

    Hibernate的多对一和一对多操作实例

    - **映射配置**:在`CUSTOMER.hbm.xml`映射文件中,可以看到`&lt;set&gt;`元素用于定义一对多关系,其中`inverse="true"`属性表示反向操作由另一方负责,`lazy="true"`则表示延迟加载,`cascade="all"`意味着当父对象发生...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    Hibernate一对多使用非主键关联设置

    在Java的持久化框架Hibernate中,一对多关系是常见的实体关联类型,特别是在处理数据库中的表结构时。在标准的关系型数据库设计中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。例如,一个...

Global site tag (gtag.js) - Google Analytics