Hibernate之mappedBy与@JoinColumn
@JoinColumn所在实体是关系拥有方,name即拥有方对应表到参考表的外键名称。
@mappedBy所在实体是关系的被拥有方,value值owner中表示被拥有类的属性。
在单向关系中不需要设置mappedBy属性,双向关系中必须设置,避免双方都建立外键字段。
数据库中一对多的关系,关联关系总是被多方维护的,即外键建在多方,我们在单方对象上使用注解@OneToMany(mappedby=" "),把关系的维护交给多方对象的属性去完成。
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),它指向theowning side(拥有方);
c) 关系的拥有方负责关系的维护,在拥有方建立外键,所以用到@JoinColumn
d)mappedBy跟JoinColumn/JoinTable总是处于互斥的一方。
多对多
这里的维护关联关系,拿多对多来说就是中间表,在不设置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添加一条数据,然后手动在中间表中添加它们的关联关系
2.在程序中执行删除User
Hibernate: delete from t_user where id=?
删除了User,并没有对中间表发生影响
3.在程序中执行删除Game
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game where game_id=?
对中间表产生了影响,说明是Game在维护它们之间的关联关系
一对多
(同样是在不设置cascade的前提下)一对多的关联关系其实更简单,因为它们之间没有中间表,User和Group它们的关联关系就是体现在One方(Group)的主键是Many方(User)的外键,这个关联关系就在User的表中。因为有外键的存在,Group在User删除之前,是不能够删除的,所以它们之间维护关联关系的任务就只能交给Many方(User)。
Hibernate之mappedBy与@JoinColumn的更多相关文章
- Hibernate之mappedBy
Hibernate之mappedBy 摘要: 一.mappedBy单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1对多的关系,关联关系总是被多方维护的即外键建在多方,我们 ...
- org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.entity.annotations.House.district in
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.entity. ...
- Hibernate之mappedBy【必读】
[http://www.cnblogs.com/redcoatjk/p/4236445.html] 一.mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1 ...
- org.hibernate.AnnotationException: mappedBy reference an unknown target entity property
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: xxxxxxx 原因是 ...
- mappedBy和JoinColumn,onetomany。
无论是onetomany,还是manytoone.都要设置级联关系(cascade),否则不会储存关联的数据. @Entity public class Clazzss { @Id @Generate ...
- 。。。Hibernate中mappedBy属性。。。
今天在学习Hibernate中,感觉这个mappedBy这个注解属性有点小难度.不过理解之后,还是阔以的! 首先,mappedBy这个注解只能够用在@OntToOne,@OneToMany,@many ...
- 转Hibernate Annotation mappedBy注解理解
在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...
- HIbernate 注解 mappedBy 与 inverse
hibernate中 配置文件中的inverse属性意思就是放弃控制权 ,主导权由对方控制,也就是说 我方进行的删除等操作不会影响到对方 即使设置了cascadeType.ALL 这个解释其实就是hi ...
- hibernate基于注解的维护权反转:@OneToMany(mappedBy=)
背景说明:首先是SSH环境下,对象基于注解的方式映射到数据库: 昨天遇到一个比较纠结的问题,@OneToMany(mappedBy="xxx"), mappedBy属性有什么用,然 ...
随机推荐
- Reverse string using recursion
On-Site Question 3 - SOLUTION Question Given a string, write a function that uses recursion to rever ...
- Activiti中23张表的含义
1.与流程定义相关的4张表: 2.与执行任务相关的5张表: 3.与流程变量相关的2张表
- 解决启动nginx时报80端口被占用的问题
如何解决启动nginx时报80端口被占用 最近公司的的一个服务器上需要部署多个项目,但80端口只有一个,所有只有使用Nginx来代理,当访问域名时就可以自动 转到IP:端口号,而不需要在域名后面加端口 ...
- redhat 6用yum方式安装nginx
前提条件:如果发生了没有注册redhat账号造成没有权限使用yum的情况下,可以参考:http://www.cnblogs.com/boshen-hzb/p/6080431.html 1.cd /et ...
- java-Runtime 调用命令
java是一个跨平台的语言,可以在多种平台上运行相应的程序,但是有些时候进行数据的提取时,可能就需要系统的相关命令,尤其是调用linux命令 这时候就需要使用java的Runtime命令,来执行lin ...
- Android draw Rect 坐标图示
前两天在博客发了在例子 android Canvas类介绍 http://byandby.javaeye.com/blog/825330 建议大家 点进去 看一看 不然下边没办法 继续啊. 我还是把这 ...
- 图片捕获工具driftnet
driftnet是一款简单而使用的图片捕获工具,可以很方便的在网络数据包中抓取图片.该工具可以实时和离线捕获指定数据包中是图片,当然在kali里是有的. 在我之前的一篇博文<kali下搭建WiF ...
- 与数据库连接的页面增删改查 的easyui实现(主要是前端实现)
一.首先看一下最终实现的效果,上图 二.思路,主要是分两个文件实现,一个是页面显示文件:代码如下: <html> <head> <title>示例管理</ti ...
- Chinese Seals
Emperors used seals to proclaim their decrees to their people, officials used seals to exercise thei ...
- FreeBSD查看即时网络流量
1.数据包 “netstat 1″一秒钟累计一次,”netstat 2″两秒钟累计一次.依此类推 2.查看网卡流量:”systat -if 1″每秒钟刷新一次,”systat -if 2″两秒钟刷新一 ...