@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的更多相关文章

  1. Hibernate之mappedBy

    Hibernate之mappedBy 摘要: 一.mappedBy单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1对多的关系,关联关系总是被多方维护的即外键建在多方,我们 ...

  2. 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. ...

  3. Hibernate之mappedBy【必读】

    [http://www.cnblogs.com/redcoatjk/p/4236445.html] 一.mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1 ...

  4. org.hibernate.AnnotationException: mappedBy reference an unknown target entity property

    org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: xxxxxxx 原因是 ...

  5. mappedBy和JoinColumn,onetomany。

    无论是onetomany,还是manytoone.都要设置级联关系(cascade),否则不会储存关联的数据. @Entity public class Clazzss { @Id @Generate ...

  6. 。。。Hibernate中mappedBy属性。。。

    今天在学习Hibernate中,感觉这个mappedBy这个注解属性有点小难度.不过理解之后,还是阔以的! 首先,mappedBy这个注解只能够用在@OntToOne,@OneToMany,@many ...

  7. 转Hibernate Annotation mappedBy注解理解

    在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...

  8. HIbernate 注解 mappedBy 与 inverse

    hibernate中 配置文件中的inverse属性意思就是放弃控制权 ,主导权由对方控制,也就是说 我方进行的删除等操作不会影响到对方 即使设置了cascadeType.ALL 这个解释其实就是hi ...

  9. hibernate基于注解的维护权反转:@OneToMany(mappedBy=)

    背景说明:首先是SSH环境下,对象基于注解的方式映射到数据库: 昨天遇到一个比较纠结的问题,@OneToMany(mappedBy="xxx"), mappedBy属性有什么用,然 ...

随机推荐

  1. Java数据结构和算法(一)散列表

    Java数据结构和算法(一)散列表 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 散列表(Hash table) 也叫哈希表 ...

  2. 配置tomcat server.xml 文件 ,虚拟路径

    <Context path="/web" docBase="D:\workspace\web\src\main\webapp"  reloadable=& ...

  3. An integration of deep learning and neuroscience

    Recently, I have read a paper about the integration of deep learing and neuroscience, which elaborat ...

  4. ubuntu16下Elasticsearch5.1.1安装部署

    本人在安装es5.1.1版本时候整理的一些过程,参照了网上部分过程:其中过程中也出现一些其它问题,出现的问题和解决方案都整理在此文中. 1Elasticsearch5.1.1安装 到ES官网https ...

  5. Unsorted, maximum ==> sorted

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  6. 06 数据库入门学习-视图、sql注入、事务、存储过程

    一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用 ...

  7. 2018.08.22 NOIP模拟 string(模拟)

    string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...

  8. MATLAB常用函数

      Matlab的内部常数 pi                   圆周率 exp(1)             自然对数的底数e i 或j                虚数单位 Inf或 inf ...

  9. cmd运行命令

    winver检查Windows版本 dxdiag检查DirectX信息 mem.exe显示内存使用情况 Sndvol32音量控制程序 sfc.exe系统文件检查器 gpedit.msc 组策略 reg ...

  10. Sublime必用快捷键[私人]

    最近一年前端开发都是用sublime这款编辑器, 相对于webStorm强大而启动慢.editplus快启动而功能弱, sublime恰好在两者之间:而且其指令行安装.更新.卸载插件比eclipse之 ...