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

Hibernate中one-to-many/many-to-one和many-to-many

阅读更多

<1>one-to-many/many-to-one

(1)表结构

/**客户表**/
create table CUSTOMERS(
ID int not null auto_increment,
Name varchar(15),
primary key(ID)
);

/**订单表**/
create table ORDERS(
ID bigint not null auto_increment,
ORDER_NUMBER varchar(15),
CUSTOMER_ID int not null,
primary key(ID),
foreign key (CUSTOMER_ID) references CUSTOMERS(ID)
);

(2)Customers.hbm.xml

Java代码 复制代码
  1. <set    
  2.     name="Orders"    
  3.     inverse="true"  
  4.     lazy="false"  
  5.     cascade="all">    
  6.        <key column="CUSTOMER_ID"/>   
  7.        <one-to-many class="Orders"/>   
  8. </set>  
<set 
	name="Orders" 
	inverse="true"
	lazy="false"
	cascade="all"> 
       <key column="CUSTOMER_ID"/>
       <one-to-many class="Orders"/>
</set>



说明:inverse="true",Customers端无须维护这个关联关系。也就是当Customers对象变化时,不用同步更新它的关联的Orders(Orders这端的inverse="false",表明由它来维护关系),这样避免双方重复更新同一关系。

(3)Orders.hbm.xml

Java代码 复制代码
  1. <many-to-one   
  2.     name="Customer"  
  3.     column="CUSTOMER_ID"  
  4.     class="Customers"  
  5.     not-null="true"  
  6.     >   
  7. </many-to-one>  
<many-to-one
	name="Customer"
	column="CUSTOMER_ID"
	class="Customers"
	not-null="true"
	>
</many-to-one>



<2>many-to-many

(1)表结构

create table AUTHORIZATION(
ID bigint(20) not null auto_increment,
AUTH int(11),
AUTHORIZE int(11),
PRIMARY KEY (ID)
);

create table USR(
ID bigint(20) not null auto_increment,
NAME varchar(16),
PRIMARY KEY (ID)
);

/**双向关联的中间连接表**/
create table USERAUTH(
ID bigint(20) not null auto_increment,
USER_ID bigint(20),
AUTH_ID bigint(20),
PRIMARY KEY (ID)
);

(2)Authorization.hbm.xml

Java代码 复制代码
  1. <set name="users"  
  2.      table="userauth"  
  3.      inverse="false"  
  4.      cascade="all">   
  5.     <key column="AUTH_ID"/>   
  6.     <many-to-many class="Usr" column="USER_ID"/>   
  7. </set>  
<set name="users"
     table="userauth"
     inverse="false"
     cascade="all">
	<key column="AUTH_ID"/>
	<many-to-many class="Usr" column="USER_ID"/>
</set>



(3)Usr.hbm.xml

Java代码 复制代码
  1. <set name="auths"  
  2.      table="userauth"  
  3.      cascade="all"  
  4.      inverse="true"><!--由Authorization一端来维护关系-->   
  5.          <key column="USER_ID"/>   
  6.     <many-to-many class="Authorization" column="AUTH_ID"/>   
  7. </set>  
<set name="auths"
     table="userauth"
     cascade="all"
     inverse="true"><!--由Authorization一端来维护关系-->
         <key column="USER_ID"/>
	<many-to-many class="Authorization" column="AUTH_ID"/>
</set>



说明:多对多关系,通过一个中间连接表,分离成了两个一对多关系。

测试:

Java代码 复制代码
  1. Usr userA = new Usr();   
  2. Usr userB = new Usr();   
  3. userA.setName("jinming");   
  4. userB.setName("genghua");   
  5.   
  6. Authorization auth1 = new Authorization();   
  7. Authorization auth2 = new Authorization();   
  8. auth1.setAuth(0);   
  9. auth1.setAuth(10);   
  10. auth2.setAuth(1);   
  11. auth2.setAuthorize(11);   
  12.   
  13. Set<Authorization> set1 = new HashSet<Authorization>();   
  14. set1.add(auth1);   
  15. set1.add(auth2);   
  16. userA.setAuths(set1);   
  17. userB.setAuths(set1);   
  18.   
  19. Set<Usr> set2 = new HashSet<Usr>();   
  20. set2.add(userA);   
  21. set2.add(userB);   
  22. auth1.setUsers(set2);   
  23. auth2.setUsers(set2);   
  24.   
  25. userDao.save(userA);   
  26. userDao.save(userB);  
分享到:
评论

相关推荐

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

    总结,Hibernate的one-to-many和many-to-one关系映射是数据库对象关联的基础,理解和熟练掌握它们能帮助开发者更高效地设计和实现Java持久化层。通过合理的配置和实践,可以构建出高性能、易于维护的数据访问层。

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

    在实际应用中,我们经常需要建立双向关联,即在many-to-one的一端和one-to-many的一端都可以访问到对方。例如,班级可以获取其所有学生,而学生也可以知道他们所属的班级。在双向关联中,一方(通常是one-to-many的...

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

    本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...

    Hibernate-one-to-many

    同时,`Account.hbm.xml`中的`many-to-one`元素将`column`属性设置为`FID`,表示通过`FID`字段关联到`User`实体。 #### 测试场景解释 在测试场景中,我们创建了一个`User`对象和一个`Account`对象,并在`User`对象...

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

    在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`&lt;many-to-one&gt;`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`&lt;set&gt;`标签,表示班级可以包含多个...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    综上所述,`many-to-one` 和 `cascade` 是Hibernate中非常重要的概念,它们能够帮助开发者更高效地管理实体之间的关系。然而,在实际应用中,需要根据具体的业务需求和场景来合理选择和配置这些功能,避免不必要的...

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

    在Hibernate中,一对一唯一外键关联映射可以通过 `&lt;many-to-one&gt;` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml &lt;generator class="native" /&gt; &lt;/id&gt; ...

    Hibernate中many-to-one关系的编写_远航的水手

    Hibernate中many-to-one关系的编写_远航的水手

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Hibernate中many-to-one关系的编写_远航的水手.htm

    Hibernate中many-to-one关系的编写_远航的水手.htm

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Hibernate应用例子many-to-many

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

    Hibernate one to many(many to one) 配置

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

    Hibernate Tutorial 04 (Many-to-one and One-to-one Association

    为了使用 `publisher` 属性,我们需要在 `Book` 类的 Hibernate 映射文件中添加 `&lt;many-to-one&gt;` 映射。这将在 `BOOK` 表中添加一个名为 `PUBLISHER_ID` 的列,并存储关联出版商的 ID。 ```xml &lt;!-- 其他属性的...

    Hibernate Many-To-Many Mapping Annotations

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

    (5)Hibernate中的many-to-many和并发

    在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据模型,它表示一个实体可以与多个其他实体之间存在关联,反之亦然。这篇博客文章可能会深入探讨如何在Hibernate中处理这种多对多的关系,并可能涉及...

    Hibernate集合关系映射及one-one,one-many,many-many示例(带注释)

    本程序包含: hibenate 上传图片,二进制数据,大文本,集合映射的多种关系,onetoone,ontomany,manytomany等关系详细代码示例以及注释,全部由本人测试通过,对理解hibernate配置有极大帮助。

    Hibernate many-to-many

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

    Hibernate实现many-to-many的映射关系

    3. 在对应的映射文件中,使用`&lt;set&gt;`和`&lt;one-to-many&gt;`或`&lt;many-to-one&gt;`元素配置映射关系。 4. 如有必要,可以考虑将多对多关系转换为一对多,以优化性能和操作性。 理解并熟练掌握这些概念和实践,将有助于在使用...

Global site tag (gtag.js) - Google Analytics