hibernate的配置文件工作原理和两种设计:一对多、多对多


本文摘自PHP中文网,作者php是最好的语言,侵删。

"一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多。多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一。个人简单的一点小结 。

一对多

实体类

1

2

一: private Set<LinkMan> linkMans; // 表达一对多关系

多: private Customer customer ; //表达多对一关系

配置文件

一:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<!-- 集合,一对多关系,在配置文件中配置 -->

<!--

    name属性:   集合属性名

    column属性: 外键列名

    class属性:  与我关联的对象完整类名

 -->

 <!--

     级联操作: cascade属性

         save-update: 级联保存更新

         delete:      级联删除

         all:         save-update+delete

     级联操作: 简化操作.目的就是为了少些两行代码.

  -->

  <!-- inverse属性: 配置关系是否维护.

             true:          customer不维护关系

             false(默认值): customer维护关系

      inverse属性: 性能优化.提高关系维护的性能.

      原则: 无论怎么放弃,总有一方必须要维护关系.

      一对多关系中: 一的一方放弃.也只能一的一方放弃.多的一方不能放弃.

  -->

<set name="linkMens" inverse="true" cascade="delete">

    <key column="lkm_cust_id" ></key>

    <one-to-many class="LinkMan" />

</set>

多:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<!-- 多对一 -->

<!--

    name属性:   引用属性名

    column属性: 外键列名

    class属性:  与我关联的对象完整类名

 -->

 <!--

     级联操作: cascade属性

         save-update: 级联保存更新

         delete:      级联删除

         all:         save-update+delete

     级联操作: 简化操作.目的就是为了少些两行代码.

  -->

  <!-- 多的一方: 不能放弃维护关系的.外键字段就在多的一方.  -->

<many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>

多对多

实体类

1

2

多:private Set<User> users; // 表达多对多关系

多:private Set<Role> roles; // 表达多对多关系

配置文件
多:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<!-- 多对多关系表达 -->

<!--

    name: 集合属性名

    table: 配置中间表名

    key

     column: 外键,别人引用"我"的外键列名

    many-to-many

     class:   我与哪个类是多对多关系

     column:  外键.我引用别人的外键列名

 -->

<!-- 使用inverse属性

    true: 放弃维护外键关系

    false(默认值):维护关系

     

结论: 将来在开发中,如果遇到多对多关系.一定要选择一方放弃维护关系.

     一般谁来放弃要看业务方向. 例如录入员工时,需要为员工指定所属角色.

     那么业务方向就是由员工维护角色. 角色不需要维护与员工关系.角色放弃维护

 -->       

<set name="users" table="sys_user_role" inverse="true" >

    <key column="role_id" ></key>

    <many-to-many class="User" column="user_id" ></many-to-many>

</set>

多:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<!-- 多对多关系表达 -->

<!--

    name: 集合属性名

    table: 配置中间表名

    key

     column: 外键,别人引用"我"的外键列名

    many-to-many

     class:   我与哪个类是多对多关系

     column:  外键.我引用别人的外键列名

 -->

 <!-- cascade级联操作:

             save-update:  级联保存更新

             delete:       级联删除

             all:          级联保存更新+级联删除

     结论: cascade简化代码书写.该属性使不使用无所谓. 建议要用只用save-update.

          如果使用delete操作太过危险.尤其在多对多中.不建议使用.

 -->

<set name="roles" table="sys_user_role" cascade="save-update" >

    <key column="user_id" ></key>

    <many-to-many class="Role" column="role_id" ></many-to-many>

</set>

相关推荐:

数据库设计多对多关系的几种形态_MySQL

MySQL多实例的配置和管理详细

以上就是hibernate的配置文件工作原理和两种设计:一对多、多对多的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

ubuntu环境下如何使Java连接mysql数据库

只会sql能找什么工作?

关于Java基于redis有序集合实现排行榜

Java中如何实现对象的序列化和反序列化?(两种方法)

ssm分页的方法介绍(代码示例)

mysql通用查询日志和慢查询日志的简单分析

mysql语句与Java代码实现按需过滤企业员工的资质证书

两分钟谈谈sqlserver的优缺点

mysql数据库优化的介绍(图文)

介绍基于Java和mysql的图书管理系统

更多相关阅读请进入《Java》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...