`
德莫罗
  • 浏览: 174164 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate 两种方式映射many to many

阅读更多

用中介表映射many to many 的两种方式

1使用中介表,但不使用中介类。

2使用中介表,也使用中介类。

User.hbm.xml

 

<?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.hibernate.entity.User" table="user" catalog="hibernate">
        <id name="userId" type="java.lang.Long">
            <column name="USER_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" not-null="true" />
        </property>
        <!-- 共享主键方式映射 one to one 注意 class 要用完整类名-->
        <one-to-one name="relAddress" class="com.hibernate.entity.Address" cascade="save-update"></one-to-one>
        <!-- 单独列外键通过many to one + unique 属性方式映射 one to one 注意 class 要用完整类名-->
        <many-to-one name="account" class="com.hibernate.entity.Account" column="USER_ACCOUNT_ID" unique="true" cascade="save-update"></many-to-one>
         <!-- 通过中介表及中介类映射User 与 Item 的 many to many 关系 -->
        <set name="itemUser" cascade="save-update" inverse="true">
        <key column="USER_ID"></key>
        <one-to-many class="com.hibernate.entity.ItemUser"/>
        </set>
    </class>
</hibernate-mapping>

 

 Item.hbm.xml

 

<?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.hibernate.entity.Item" table="item" catalog="hibernate">
        <id name="itemId" type="java.lang.Long">
            <column name="ITEM_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="itemName" type="java.lang.String">
            <column name="ITEM_NAME" not-null="true" />
        </property>
        <!-- one to many -->
        <bag name="bids" cascade="save-update" inverse="true">
        <key column="ITEM_ID"></key>
        <one-to-many class="com.hibernate.entity.Bid"/>
        </bag>
        
           <!-- 使用中介表而不使用中介实体类的Many to Many 映射 -->
        <set name="categories" table="CATEGORY_ITEM" inverse="true" cascade="save-update">
        <key column="ITEM_ID"></key>
        <many-to-many class="com.hibernate.entity.Categary" column="CATEGORY_ID"></many-to-many>
        </set>
        <!-- 使用中介表类实现 User 与 Item 的many to many 映射 -->
        <set name="itemUser" cascade="save-update" inverse="true">
        <key column="ITEM_ID"></key>
        <one-to-many class="com.hibernate.entity.ItemUser"/>
        </set>
    </class>
</hibernate-mapping>

 ItemUser.hbm.xml<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hibernate.entity.ItemUser" table="item_user" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <many-to-one name="item" column="ITEM_ID" class="com.hibernate.entity.Item" />
        <many-to-one name="user" column="USER_ID" class="com.hibernate.entity.User" />
    </class>
</hibernate-mapping>

 Item 与 User 使用了中介类ItemUser来映射many to many 关系

 

 

categary.hbm.xml

 

<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hibernate.entity.Categary" table="categary" catalog="hibernate">
        <id name="categoryId" type="java.lang.Long">
            <column name="CATEGORY_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="categoryName" type="java.lang.String">
            <column name="CATEGORY_NAME" />
        </property>
        <!-- 使用中介表而不使用中介实体类的Many to Many 映射 -->
        <set name="items" table="CATEGORY_ITEM" cascade="save-update">
        <key column="CATEGORY_ID"></key>
        <many-to-many class="com.hibernate.entity.Item" column="ITEM_ID"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
 

 

Item 与 Categary 使用中介表,但不使用中介表的entity来映射many to many 关系

 

最后,代码工程文件作为附件上传


分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    hibernate many-to-many级联保存,级联更新,级联删除

    在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据库表之间的关联方式,它表示一个实体可以与多个其他实体进行关联,反之亦然。本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、...

    hibernate中many2many映射

    在Java持久化框架Hibernate中,Many-to-Many(多对多)映射是一种常见的关联关系类型,用于表示两个实体类之间复杂的关系。在本场景中,我们探讨的是如何在Hibernate中配置Many-to-Many映射,并使用MySQL数据库来...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    hibernate 关联映射(一) many to one

    本篇文章将深入探讨Hibernate中的关联映射,特别是"Many to One"关系的映射。在数据库设计中,Many to One是一种常见的关系,即一个实体(表)可以与多个其他实体相关联,而另一个实体则只与一个实体相关联。 首先...

    hibernate中one2many映射

    在Java的持久化框架Hibernate中,One-to-Many映射是一种常见的关系映射方式,它表示一个实体(比如一个用户)可以与多个其他实体(比如用户的订单)进行关联。在这个场景下,"用户"是一方,称为"One","订单"是另...

    (4)Hibernate中的many-to-one和one-to-many关系

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    Hibernate many-to-many

    "Hibernate many-to-many"指的是Hibernate中处理多对多关联关系的一种方式。多对多关系是两个实体类之间存在的一种复杂关联,比如学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 ...

    hibernate集合的映射

    本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际开发中的应用场景和配置。 一、Set集合映射 Set集合映射是最常见的映射类型,它不允许重复元素。在Hibernate中,Set通常...

    hibernate map 集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...

    Hibernate Many-To-Many Mapping Annotations

    在Java的持久化框架Hibernate中,Many-to-Many映射是一种常见的关系模型,它用于表示两个实体类之间多对多的关系。在这个主题中,我们将深入探讨如何使用注解来实现这种映射,以及其背后的数据库原理和实际应用。 ...

    hibernate学习5之one-to-many双向关联.docx

    在Hibernate框架中,双向一对多关联映射是常见的对象关系映射(ORM)方式,用于在Java对象模型中表示数据库中的两个实体之间的多对一关系。在这个场景中,"一"端通常指的是一个实体可以拥有多个另一个实体的实例,而...

    hibernate实体关联关系映射

    Hibernate作为一种强大的对象关系映射(Object Relational Mapping,简称ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了持久化层的开发工作,而且提高了应用程序的灵活性与可维护性。其中,实体关联...

    hibernate的多种映射关系

    Hibernate 提供了两种加载策略:懒加载(默认)只在需要时加载关联数据,而立即加载则在加载主对象时同时加载关联对象。`fetch` 属性在 `@ManyToOne` 和 `@OneToMany` 中用来设置加载策略。 8. **反向引用 ...

    Hibernate映射笔记

    - `&lt;one-to-one&gt;`、`&lt;many-to-one&gt;`、`&lt;one-to-many&gt;`和`&lt;many-to-many&gt;`:分别用于一对一、一对多、多对一和多对多的关系映射,通过`&lt;class&gt;`元素的嵌套和属性如`inverse`、`cascade`等来控制关系的维护方式和级联...

    Hibernate一对多映射

    在Java的持久化框架Hibernate中,一对多映射(One-to-Many Mapping)是一种常见的关系映射类型,它反映了数据库中表与表之间的关联关系。本文将深入探讨Hibernate一对多映射的概念、配置以及实现方式,并结合提供的...

Global site tag (gtag.js) - Google Analytics