Hibernate注解完成主从表外键关联
来源:互联网 发布:java考试参考题 编辑:程序博客网 时间:2024/05/15 01:51
今天在设置主从表的过程中 出现了异常 显示should be mapped with insert=false updatable=false异常
提示我要在外键的注解上加上 insert=false updatable=false 然而我的从表的外键需要进行增删改查操作导致其他功能无法实现
数据库的主键外键一直都被我们挂在嘴边 但是却不是真正的了解 这次借机可以好好了解一下
首先概括的说一下主外键的作用
主键是能确定一条记录的唯一标识,而外键用于与另外一张表的关联,用于确定另一张表记录的数据。
如果A表中的一个字段,是B表的主键 ,那么这个字段就可以是A表的外键。
一个表的外键是另一个表的主键
了解了主外键的基本概念 就可以具体讨论遇到的问题了
具体情况是项目中有许多机台,分别具有唯一的标识机台编号 在另一个表中是机台维修记录表 每次维修会产生维修工单 带有维修机台的编号
这时候我首先想到将工单表作为子表挂载在机台表下
通过hibernate注解进行外键关联的方法是
下面的例子中MesMachineReport是主表实体类 MtoverhalRecord是子表实体类
1.首先在主表中新建子表实体类的set集合,在子表实体类的get方法上注解@OneToMany
@OrderBy("deviceName")@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "mesMachineReport")
其中
mappedBy是指数据的拥有方 也是数据的维护方
fetch = FetchType.LAZY 是指当主表加载时 不会立刻加载子表数据 懒加载的优点在于数据可以延迟加载 优化程序性能
需要使用的时候只需要调用一下子表对象的属性例如
mesMachineReport.getMtOverhaulRecord().size();
2.在子表实体类中新建主表的对象,并在get方法加上@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "MACHINE_ID", nullable = false)
其中@JoinColumn表示外键对应的列
异常出现的地方就在这里
正是因为子表的实体类中已经有machineId这个选项 为了保证外键能够确定子表的数据
就需要对子表原有实体类中的machineId字段进行insert=false updatable=false的约束
@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "MACHINE_ID", nullable = false,insertable=false ,updatable=false)
异常就消失 但是对于这个实体类的增删改查操作都没有办法继续了 所以对于这个异常的 出现 这个方法不推荐
- Hibernate注解完成主从表外键关联
- hibernate注解关联
- hibernate关联映射注解
- hibernate注解配置关联
- hibernate注解关联
- hibernate注解版关联映射
- Hibernate自关联(使用注解)
- Hibernate注解实现一对一关联
- hibernate关联关系注解配置
- hibernate注解版关联映射
- Hibernate一对一关联映射(注解)
- Hibernate关联映射基于注解
- hibernate注解配置关联关系
- Hibernate 自关联注解方式
- Hibernate一对一关联映射(注解)
- Hibernate使用注解设定关联关系
- hibernate中实体关联的注解写法
- hibernate注解版关联映射 详解
- JVM 发生OOM的四种情况
- vlookup使用详解
- Linux 获取时间的方法
- 修改无序或有序的样式风格
- hadoop multiple namespace namenode failover
- Hibernate注解完成主从表外键关联
- IntelliJ IDEA 2017 快速学习
- JavaSE
- 网络安全概述
- 【总结】2017年中小结
- [USACO1.2]挤牛奶Milking Cows
- Hello,简书
- 简述http请求中的同步和异步
- SSM入门