博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate 多对多 最佳实践
阅读量:5061 次
发布时间:2019-06-12

本文共 2477 字,大约阅读时间需要 8 分钟。

首先 看看我们 ER 画画 :盖  一对一 。一对多 。多对多 的关系

对多 在 hibernate 中的 实现 :  一个 用户user ,拥有 多个角色 role。 一个 角色 属于 多个 用户user

事实上 多对多 就 是双向的 一对多。我们使用一个 中间表 user_role 来保存 user ,role 的 主键,来 确定 它们的 关联关系,

降低 数据的低级冗余。提高 可扩展 性

User.java 及 映射文件

public class User implements java.io.Serializable {    private static final long serialVersionUID = 1636556781734875928L;    private Long id;    private String username;    private String password;    private String state;    private Date createTime;    private IdCard idCard;    private Set
userLogs; private Set
roles;}
Role.java 及 映射文件

import java.util.Set;public class Role implements java.io.Serializable {    private static final long serialVersionUID = -5094780060641842069L;    private Long id;    private String roleName;    private String roleSign;    private String description;    private Set
users;}
多对多 最佳实践:

我们能够把 user 看成 主表, role 看成 从表。

在 主表 user 多对多中 设置  cascade="save-update" ,表明 在 新增或 更改 user 的 时候 会级联 操作role。

新增 一个 用户 user。和他的role, hibernate 是 先 插入 user , 在 插入 role ,然后再 中间表 加入 数据;

而在删除user 中 ,则 仅仅删除中间表 和 user

 

这不正是我们想要的吗, 

我们 当然不想在 删除 一个 用户user  的时候 把 它 相应的 角色 role 删除。由于  这个 角色 role 可能 是其它 用户的 角色。

仅仅要解除 关系 就可以;

而在角色 role 中。我们设置 inverse="true" ,放弃维护 关系,由于 我们通常是 为 用户 user 分配 角色 role ,降低不必要的更新语句。

到这里 讲完了 一对一 。一对多 ,多对多的关系  映射 及 一些比較好的 配置。 应该 依据 业务 。灵活应用 hibernate 。hibernate 是 一个 很 好的orm 映射框架。

在 我 看来 比 mybatis 更 灵活 , 更 高效 ,前提 是 你 要熟练 它, 兴许 有时间会 将 一些 hibernate 优化 有关 操作。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mfrbuaa/p/4707795.html

你可能感兴趣的文章
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>