首先 看看我们 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 SetuserLogs; 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 Setusers;}
多对多 最佳实践:
我们能够把 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 优化 有关 操作。
版权声明:本文博客原创文章,博客,未经同意,不得转载。