<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
- <set
-
name="Orders"
-
inverse="true"
-
lazy="false"
-
cascade="all">
-
<key column="CUSTOMER_ID"/>
-
<one-to-many class="Orders"/>
- </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
- <many-to-one
-
name="Customer"
-
column="CUSTOMER_ID"
-
class="Customers"
-
not-null="true"
- >
- </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
- <set name="users"
-
table="userauth"
-
inverse="false"
-
cascade="all">
-
<key column="AUTH_ID"/>
-
<many-to-many class="Usr" column="USER_ID"/>
- </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
- <set name="auths"
-
table="userauth"
-
cascade="all"
-
inverse="true"><!--由Authorization一端来维护关系-->
-
<key column="USER_ID"/>
-
<many-to-many class="Authorization" column="AUTH_ID"/>
- </set>
<set name="auths"
table="userauth"
cascade="all"
inverse="true"><!--由Authorization一端来维护关系-->
<key column="USER_ID"/>
<many-to-many class="Authorization" column="AUTH_ID"/>
</set>
说明:多对多关系,通过一个中间连接表,分离成了两个一对多关系。
测试:
- Usr userA = new Usr();
-
Usr userB = new Usr();
-
userA.setName("jinming");
-
userB.setName("genghua");
-
-
Authorization auth1 = new Authorization();
-
Authorization auth2 = new Authorization();
-
auth1.setAuth(0);
-
auth1.setAuth(10);
-
auth2.setAuth(1);
-
auth2.setAuthorize(11);
-
-
Set<Authorization> set1 = new HashSet<Authorization>();
- set1.add(auth1);
- set1.add(auth2);
- userA.setAuths(set1);
- userB.setAuths(set1);
-
-
Set<Usr> set2 = new HashSet<Usr>();
- set2.add(userA);
- set2.add(userB);
- auth1.setUsers(set2);
- auth2.setUsers(set2);
-
- userDao.save(userA);
- userDao.save(userB);
分享到:
相关推荐
总结,Hibernate的one-to-many和many-to-one关系映射是数据库对象关联的基础,理解和熟练掌握它们能帮助开发者更高效地设计和实现Java持久化层。通过合理的配置和实践,可以构建出高性能、易于维护的数据访问层。
在实际应用中,我们经常需要建立双向关联,即在many-to-one的一端和one-to-many的一端都可以访问到对方。例如,班级可以获取其所有学生,而学生也可以知道他们所属的班级。在双向关联中,一方(通常是one-to-many的...
本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...
同时,`Account.hbm.xml`中的`many-to-one`元素将`column`属性设置为`FID`,表示通过`FID`字段关联到`User`实体。 #### 测试场景解释 在测试场景中,我们创建了一个`User`对象和一个`Account`对象,并在`User`对象...
在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`<many-to-one>`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`<set>`标签,表示班级可以包含多个...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
综上所述,`many-to-one` 和 `cascade` 是Hibernate中非常重要的概念,它们能够帮助开发者更高效地管理实体之间的关系。然而,在实际应用中,需要根据具体的业务需求和场景来合理选择和配置这些功能,避免不必要的...
在Hibernate中,一对一唯一外键关联映射可以通过 `<many-to-one>` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml <generator class="native" /> </id> ...
Hibernate中many-to-one关系的编写_远航的水手
本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...
Hibernate中many-to-one关系的编写_远航的水手.htm
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...
标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...
为了使用 `publisher` 属性,我们需要在 `Book` 类的 Hibernate 映射文件中添加 `<many-to-one>` 映射。这将在 `BOOK` 表中添加一个名为 `PUBLISHER_ID` 的列,并存储关联出版商的 ID。 ```xml <!-- 其他属性的...
在Java的持久化框架Hibernate中,Many-to-Many映射是一种常见的关系模型,它用于表示两个实体类之间多对多的关系。在这个主题中,我们将深入探讨如何使用注解来实现这种映射,以及其背后的数据库原理和实际应用。 ...
在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据模型,它表示一个实体可以与多个其他实体之间存在关联,反之亦然。这篇博客文章可能会深入探讨如何在Hibernate中处理这种多对多的关系,并可能涉及...
本程序包含: hibenate 上传图片,二进制数据,大文本,集合映射的多种关系,onetoone,ontomany,manytomany等关系详细代码示例以及注释,全部由本人测试通过,对理解hibernate配置有极大帮助。
"Hibernate many-to-many"指的是Hibernate中处理多对多关联关系的一种方式。多对多关系是两个实体类之间存在的一种复杂关联,比如学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 ...
3. 在对应的映射文件中,使用`<set>`和`<one-to-many>`或`<many-to-one>`元素配置映射关系。 4. 如有必要,可以考虑将多对多关系转换为一对多,以优化性能和操作性。 理解并熟练掌握这些概念和实践,将有助于在使用...