`
cheng330301560
  • 浏览: 177867 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate中一对多的双向关联

阅读更多

在这里我直接就说hibernate的一对多的双向关联,对于一对多的单项关联和多对一的单项关联几乎就没用到,在项目中也很少使用。

 

首先有两张关联的表,类别表Category和展品表Product,一个类别对应多种展品,

 

category字段有 id(主键),name

 

product字段有 id(主键) name,price,c_id(这个就是外键)

 

在Category类中

 

    private Integer id;
    private String name;
    private Set<Product> products=new HashSet();//注意这里不要只写private Set<Product> products,不然后面会出现问题的,因为在取集合的时候回返回null,这样是不行的

 

定义好属性后再分别生成对于的get/set方法

 

在Product类中

    private Integer id;
    private String name;
    private Double price;
    private Category category;

 

再分别生成对对应的get/set方法

 

在设置相应的.hbm.xml文件

 

在Category.hbm.xml文件中

 

<hibernate-mapping>
    <class name="com.cheng.entry.Category" table="category">
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="255"></column>
        </property>
        <set name="products(这个表示的就是Category类中的Set集合)">
            <key column="c_id(这个说明的就是在表product中的外键)"></key>
            <one-to-many class="com.cheng.entry.Product(说明所在的类)"/>
        </set>

    </class>
</hibernate-mapping>

 

 

在Product.hbm.xml中

 

<hibernate-mapping>
    <class name="com.cheng.entry.Product" table="product">
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="200"></column>
        </property>
        <property name="price" type="java.lang.Double">
            <column name="price" ></column>
        </property>
        <many-to-one name="category(这个就是在Product类中定义的)" class="com.cheng.entry.Category">
            <column name="c_id(对应product表中的外键)"></column>
        </many-to-one>

    </class>
</hibernate-mapping>

 

 

这样就完成了

 

在这里还可以在

一方中设置 cascade属性

        <set name="products(这个表示的就是Category类中的Set集合)" cascade="save-update">
            <key column="p_id(这个说明的就是在表product中的外键)"></key>
            <one-to-many class="com.cheng.entry.Product(说明所在的类)"/>
        </set>

 

表示的级联,意思就是说主动方执行操作时,被关联的对象(被动方)是否要同步执行同一操作(在一对多的关联中,一般都是一方是主动方)

cascade有四个值:

none:什么也不做

save-update:一方进行添加和更新时(这个经常用)

all:所以操作

delete:

delete-orphan:

 

在一方中可以设置反转inverse="true"

控制反转,在一对多中让多方变为主动对象

 

 

 

 

分享到:
评论

相关推荐

    hibernate多对多双向关联

    "多对多双向关联"是Hibernate中一种关系映射类型,涉及两个实体类之间的复杂关联。在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生可以选修多门课程,课程也可以被多名...

    hibernate一对多,多对一,一对多双向关联

    对于初学者来说,通过阅读和分析这样的例子,能更好地理解和掌握Hibernate中一对多、多对一以及双向关联的实践应用。 总结,学习和理解Hibernate中的一对多、多对一和双向关联关系,对于开发基于Java的持久化层至关...

    hibernate_second项目源码

    **hibernate_second项目源码**是一...通过详细研究**hibernate_second**项目,开发者不仅可以掌握Hibernate中一对多双向关联的实现,还能学习到如何在实际项目中有效管理数据库操作,提升Java应用程序的数据处理能力。

    hibernate对映射xml的一对多的双向关联详解

    本篇文章将深入探讨 Hibernate 中的一对多双向关联映射。 在数据库设计中,一对多关联是指一个实体可以与多个其他实体相关联,比如一个学生可以有多个课程,一个部门可以有多名员工。在Hibernate中,这种关系可以...

    Hibernate一对多单向关联映射

    本篇文章将深入探讨Hibernate中一对多单向关联映射的概念、配置以及其实现方法。 一、概念理解 一对多关联意味着在数据库中,一个表(实体)的一条记录可以对应另一个表(实体)的多条记录。例如,一个学生可以有多...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

    hibernate 双向一对一基于主键的关联映射

    总结,双向一对一基于主键的关联映射是Hibernate中一种重要的关联类型,它提供了两个实体类之间的直接导航属性,使得数据操作更加便捷。在实际项目中,需要根据需求谨慎选择关联类型,并确保数据一致性。

    hibernate关联关系

    多对多关联意味着两个实体之间存在一对多的双向关系。这种关系需要一个中间表来存储两个实体的连接。使用`@ManyToMany`注解,可以创建一个中间实体(关联表)或者使用`@JoinTable`注解定义中间表。示例如下: ```...

    hibernate映射篇

    在本篇文章中,我们将深入探讨Hibernate中的几种关联映射,包括多对一(Many-to-One)、一对一(One-to-One)以及一对多(One-to-Many)映射。 首先,我们来看多对一(Many-to-One)的关联映射。这种映射关系通常...

    hibernate 常用书籍

    “Hibernate高级特性.pdf”这本书可能深入探讨了Hibernate的高级功能,如第二级缓存、Cascading和Association Management、一对一、一对多、多对一、多对多的关联关系处理、双向关联的维护,以及延迟加载和立即加载...

    hb_hibernate

    `hb_04_many2many_bidirectional`和`hb_04_many2many_unidirectional`分别表示多对多的双向和单向映射。在多对多映射中,通常需要一个中间表来存储两个实体的关联关系。 通过学习和实践这些示例,开发者可以更好地...

    hibernate学习的最好资料

    4. **关联映射**:学习如何处理一对多、多对一、一对一和多对多的关系映射。 5. **缓存机制**:熟悉Hibernate的缓存策略,如第一级缓存和第二级缓存,以及查询缓存,以优化性能。 6. **性能优化**:包括延迟加载、...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    14. **一对多(One-to-Many)、多对一(Many-to-One)、多对多(Many-to-Many)关系映射**:Hibernate提供了多种关联映射方式,如List、Set、Map等,以适应不同类型的关联关系。 15. **双向关联**:在关联映射中,...

    《Hibernate3.2 参考手册》

    例如,`@OneToOne`用于一对一关系,`@ManyToOne`和`@OneToMany`用于一对多,`@ManyToMany`处理多对多关联。 6. **组件(Components)**:组件是对象的一个部分,可以映射到数据库的一个或多个表。它们通常用作复杂...

    Getting Started with Hibernate search

    桥接技术是Hibernate Search中一个有趣的功能,它允许你在实体的非字段属性上执行搜索,比如计算属性或关联实体的属性。通过定义一个桥接器(Bridge),你可以告诉Hibernate Search如何将这些属性的值映射到索引中,...

    hibernate总结

    - **多对多(Many-to-Many)**:这种关系比较复杂,通常需要一个中间表来存储两个类的关联。在双方类中使用`@ManyToMany`,并通过`@JoinTable`来定义中间表的配置,包括joinColumns和inverseJoinColumns,分别对应...

    最新Java面试宝典pdf版

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

    Java面试宝典-经典

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

Global site tag (gtag.js) - Google Analytics