Hibernate之mappedBy
Hibernate之mappedBy
摘要: 一。mappedBy单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1对多的关系,关联关系总是被多方维护的即外键建在多方,我们在单方对象的@OneToMany(ma.........
一。mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段
数据库中1对多的关系,关联关系总是被多方维护的即外键建在多方,我们在单方对象的@OneToMany(mappedby=" ")
把关系的维护交给多方对象的属性去维护关系
对于mappedBy复习下:
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向theowning side(拥有方);
c) 关系的拥有方负责关系的维护,在拥有方建立外键。所以用到@JoinColumn
d)mappedBy跟JoinColumn/JoinTable总是处于互斥的一方
二。下面是我自己的理解,一直对hibernate中的维护关联关系不太了解,总不知道他们具体指的是什么
这里的维护关联关系,拿多对多来说就是中间表,在不设置cascade的情况下,中间表由负责维护关联关系的一方维护
举例说明:
Game 和User 两个实体类,他们是多对多的关系,有中间表t_game-user.
在User中配置有:
@ManyToMany(mappedBy="users")
public List<Game> getGames() {
return games;
}
Game中配置有:
@ManyToMany
@JoinTable(name = "t_game_user",
joinColumns = {@JoinColumn(name = "game_id",referencedColumnName="gameId")},
inverseJoinColumns = {@JoinColumn(name = "user_id",referencedColumnName="id")})
public List<User> getUsers() {
return users;
}
所以说由Game来维护他们的关联关系,即中间表
表现形式:
1.因为没有配置cascade所以分别给Game,User添加4条数据,然后手动在中间表中添加他们的关联关系
2.在程序中执行删除User,
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
删除了User,并没有对中间表发生影响
3.在程序中执行删除Game
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?
对中间表产生了影响,说明是Game在维护他们之间的关联关系
三。下面这里是一对多的维护关联关系,(同样是在部设置cascade的前提下)一对多的关联关系其实更简单,因为他们之间没有中间 表,User和Group,他们的关联关系就是体现在one方(group)的主键是Many方(User)的外键,这个关联关系就在User的表中。因 为有外键的存在,group在user删除之前,是不能够删除的,所以他们之间维护关联关系的任务就只能交给Many方(User)
转载于:https://www.cnblogs.com/gtaxmjld/p/4443696.html
Hibernate之mappedBy相关推荐
- org.hibernate.AnnotationException: mappedBy reference an unknown target entity property
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: xxxxxxx 原因是 ...
- hibernate中mappedby的理解
mappedBy的意思就是"被映射",即mappedBy这方不用管关联关系,关联关系交给另一方处理 1.规律:凡是双向关联,mapped必设,因为根本都没必要在2个表中都存在一个外 ...
- hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) 主导方问题删除问题。
hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) ?? 多对一的关系 ,关系有一个主导方.主导方应该是one的 ...
- mappedBy reference an unknown target entity property 错误 @ManyToMany(mappedBy @OneToMany(mappedBy
mappedBy reference an unknown target entity property 错误 @ManyToMany(mappedBy = @OneToMany (mappedBy ...
- linux查看命令类型,查看linux命令类型
LINUX 虚拟机克隆与网络配置 虚拟机克隆后,启动之后发现网卡没有启动.发现提示错误信息"Device eth0 does not seem to be present, delaying ...
- springboot笔记整理
在搭建简单的demo程序时 出现如上报错问题, 经查询得出 关于idea 中使用mybastis报出 Invalid bound statement (not found)的错误解决方案 m ...
- 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...
近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这 ...
- Hibernate中,mappedBy和注解@JoinColumn的对比
mappedBy 我们知道,mappedBy用于指定具有双向关系的两个实体中.哪个实体是被关联处理的.它有如下四个特点: 1.只有OneToOne,OneToMany,ManyToMany上才有map ...
- hibernate - mappedby的理解
mappedBy的意思就是"被映射",即mappedBy这方不用管关联关系,关联关系交给另一方处理 1.规律:凡是双向关联,mapped必设,因为根本都没必要在2个表中都存在一个外 ...
最新文章
- TCP协议连接的11种状态浅谈
- 从零写一个编译器(六):语法分析之表驱动语法分析
- mysql_sed_使用sed提取mysql备份的一行部分
- Axure快速原型教程02--创建页面和设置界面
- android动画框架,GitHub - azhengyongqin/CustomAnimationFramework: Android自定义曲线路径动画框架...
- Java并发程序设计(二)Java并行程序基础
- 没有信号无服务器,没有信号不用怕“音离”你身边的便携式基站
- tornado之获取参数
- element ui表单处理的简洁方法
- ghost还原固态硬盘_解决方法:SSD可以使用Ghost软件吗?最后说清楚了
- HTTP代理,正向反向,代理的作用
- DeBUG|实例化servlet类xxxx异常
- ShowWindow函数用法。
- commit翻译中文_commit的意思在线翻译,解释commit中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
- 拼多多新店铺上架多少宝贝合适?是越多越好吗?
- 多元统计分析笔记二——多元分布
- uniapp 播放视频
- 在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中
- 井字棋小游戏代码(Visual Studio)
- 惠州周边适合公司团建的农家乐