博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA关系
阅读量:3888 次
发布时间:2019-05-23

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

用到的注解

注意:一对多中 一的一方默认是懒加载 多的一方默认是迫切加载

一对多中

  • @JoinColumn(name = “dept_id”)
    申明外键的列名
  • @OrderBy(“name desc”)
    用于排序
  • @OneToMany(mappedBy = “school”)
    一方放弃关系的维护由对方的某个属性来维护外键的关系
    我当前方放弃关系的维护,由对方domain中的school属性来维护关系了
  • @OneToMany(cascade = CascadeType.ALL,orphanRemoval = true)
    • cascade = CascadeType.PERSIST:级联保存
      保存1方,多方一并保存 前提: 多方和一方都要维护彼此关系
    • cascade = CascadeType.REMOVE
    • cascade = CascadeType.ALL

拥有级联添加和级联修改还有级联删除

如果级联删除用到的话,还不够,我们一般喜欢使用最强级联,你还得配置一个信息叫做
orphanRemoval = true 孤儿删除

注意:以后大家使用级联删除的时候,一定要慎用,一不小心数据全部删完

多对多中

  • @JoinTable(name = “user_role”,joinColumns =@JoinColumn(name=“user_id”),
    name = "user_role" 中间表对应的表名
    joinColumns =@JoinColumn(name="user_id") 本方domain在中间表对应的列名
    inverseJoinColumns = @JoinColumn(name="role_id") 对方domain在中间表对应的列名

一对多

单向一对多

为什么单向一对多总是用的少

答:因为性能太低了,因为保存数据的时候,不管先保存1方还是多方都要多发送sql语句一方根本就不擅长关系的维护

怎么优化
请使用双向一对多

注意事项:以后大家在对象中申明关联对象是集合的时候,一定要用接口申明 不能使用实现类申明,否则立马挂掉

双向多对一

先保存1方,再保存多方 1方再发送2条sql语句去维护关系

先保存多方,再保存1方 2条脏数据更新,2条sql语句来自于1方维护关系

从上面这个列子我们可以看出,1方根本就不适合维护关系,维护关系,还得交给多方维护

得出一个结论: 保存数据的时候永远先保存1方,再保存多方,性能最好

级联

如果要使用级联保存,必须双方都要维护关联对象

//一方维护多方目的: 它拥有级联保存多方order.getItems().add(item1);order.getItems().add(item2);//多方维护一方的目的: 让外键有值item1.setOrder(order);item2.setOrder(order);

孤儿删除

特点:能保留1方,多方干掉

转载地址:http://ujphn.baihongyu.com/

你可能感兴趣的文章
UML工具Astah的使用
查看>>
Whats my Coverage? (C0 C1 C2 C3 + Path)
查看>>
VIM技巧2 – 删除空行 (正则表达式)
查看>>
真正的阅读者,是不需要荐书的
查看>>
shell中函数返回值
查看>>
[小技巧] gdb 里数值轮换
查看>>
ClearCase项目管理介绍
查看>>
解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
查看>>
WordPress快速建站
查看>>
[豆知识] 关于 rpm 安装包
查看>>
How To Set Up vsftpd on Ubuntu 12.04
查看>>
实例演示如何使用WordPress自定义字段
查看>>
在 WordPress 指定页面加载指定 JavaScript 或 CSS 代码
查看>>
Apache配置多个监听端口和不同的网站目录的简单方法
查看>>
Linux 搭建 discuz 论坛
查看>>
如何在discuz帖子中插入视频
查看>>
怎么更改织梦网站logo和默认广告
查看>>
织梦系统如何插入优酷视频?
查看>>
Discuz设置特定用户组不启用验证码发帖权限
查看>>
百度云服务器 CentOS 图形界面支持
查看>>