`
and4walker
  • 浏览: 563884 次
  • 性别: 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中的一对多关系,这是一种常见的关联类型,尤其是在处理具有层次结构的数据时。双向一对多关系意味着一个实体可以拥有多个相关联的实体,同时每个相关联的实体也可以回指到原始实体。 **...

    SSH一对多(两表双向关联查询)

    通常情况下,一个人可能属于一个或多个组织,而一个组织也可以包含多个人员,这就构成了数据库设计中的一对多关系。在Hibernate中,我们可以使用`@ManyToOne`和`@OneToMany`注解来定义这种关联。 在`person`实体类...

    hibernate多对多关系项目

    在Hibernate中,这种关系通常通过中间表或关联表来实现,它存储了双方实体的主键,形成两个一对多的关系。 **二、Hibernate多对多映射** 在Hibernate中,实现多对多映射主要涉及以下两个方面: 1. **配置映射文件...

    角色(使用hibernate映射多对多的关系).zip

    在Java的持久化框架Hibernate中,处理数据库中的多对多关系是一项重要的任务。"角色(使用hibernate映射多对多的关系).zip"这个压缩包文件提供了一个实例,展示了如何利用Hibernate来映射数据库中的多对多关联。在...

    hibernate关系映射多对多关系

    最后,`one-to-many(5.5)`可能是关于Hibernate 5.5版本中的一对多关系的进一步讲解,可能涉及到了该版本的一些新特性或最佳实践。 综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一...

    hibernate双边关系(多对一和一对多)

    博客:http://blog.csdn.net/smilefyx/article/details/48634737

    hibernate(user-role多对多映射)

    如果使用XML配置,需要在User和Role的映射文件中添加对应的`&lt;set&gt;`标签来描述多对多关系。 **四、操作示例** 1. **添加数据** 可以通过Session的`save()`或`saveOrUpdate()`方法添加新的User和Role实例,Hibernate...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    hibernate一对多关系

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

    hibernate一对多项目

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

    Hibernate的配置详解

    2. 一对多关系(One-to-Many): - 一个实体对象可以对应多个其他实体对象的实例,通常在多方的一端使用`List`或`Set`来存储关联对象。映射文件中使用`set`或`list`元素表示这种关系。 3. 多对多关系(Many-to-...

    hibernate annotation hibernate3

    例如,表示用户与角色的一对多关系: ```java @ManyToOne @JoinColumn(name="ROLE_ID") private Role role; ``` 四、继承策略注解 1. `@Inheritance`和`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`...

    hibernate一对多实例

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

    Hibernatehibernate二级缓存.pdf

    在示例代码中,我们看到了两个实体,`Classes`和`Student`,它们之间的是一对多关系。`Classes`拥有一个`Set`类型的`students`属性,而`Student`有一个`classes`属性引用`Classes`。在映射文件中,可以选择性地为...

    韩顺平2011hibernate3.3视频教程资料

    6. **一对多、多对一关系映射**:讲解如何配置和管理对象之间的关联,如一个用户可以有多个订单(一对一到多),以及一个订单只有一个用户(多对一)。 7. **多对多关系映射**:深入探讨复杂的关系映射,如一篇文章...

    hibernate基础技术

    八、一对多、多对一、多对多关系映射 这些关系映射在实体类中通过注解(如@OneToMany、@ManyToOne、@ManyToMany)或XML映射文件定义,Hibernate会自动处理关联对象的保存和加载。 九、延迟加载(Lazy Loading) ...

    深入浅出Hibernate

    在高级主题部分,书中涵盖了Hibernate的缓存机制、性能优化策略、多对多和一对一、一对多关系的处理、以及复杂的关联映射。这些内容对于解决实际项目中的复杂问题至关重要。 最后,书中还涉及到了Hibernate与其他...

    hibernateORM1-n映射

    总结来说,"hibernateORM1-n映射"是关于如何在Hibernate框架下建立和管理数据库中一对多关系的知识。理解和熟练运用这一映射机制,将有助于提高Java应用的数据库操作效率,减少代码量,增强程序的可维护性。通过正确...

    Hibernate各种数据库关联annotatian和XML的配置集锦

    - 选择合适的映射策略:对于频繁查询的一对多关系,可以考虑使用集合的延迟加载(fetch=FetchType.LAZY);对于多对一关系,如果总是成对出现,可以考虑使用联合主键或单向关联。 - 使用二级缓存:通过配置...

Global site tag (gtag.js) - Google Analytics