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)

Hibernate之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. ...

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

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

  3. 。。。Hibernate中mappedBy属性。。。

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

  4. Hibernate之mappedBy与@JoinColumn

    @JoinColumn所在实体是关系拥有方,name即拥有方对应表到参考表的外键名称. @mappedBy所在实体是关系的被拥有方,value值owner中表示被拥有类的属性. 在单向关系中不需要设置 ...

  5. Hibernate之mappedBy【必读】

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

  6. HIbernate 注解 mappedBy 与 inverse

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

  7. 转Hibernate Annotation mappedBy注解理解

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

  8. Hibernate 非常见异常集合

    异常一:org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity ...

  9. mappedBy reference an unknown target entity property解决方法

    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error ...

随机推荐

  1. j.一个NIO与SSLEngine结合的例子

    对于BIO通道的程序来讲,建立起SSLServerSocket之后,后续的工作就和普通的ServerSocket没有什么区别了,这是因为JDK中通过JSSE的API,封装了SSL通道的实现逻辑,否则, ...

  2. EditText设置文字改变时的监听

    textWatcher = new TextChangeWatcher(); etQuerryInfo.addTextChangedListener(textWatcher); /** * 文字改变类 ...

  3. ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题

    想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...

  4. iOS开发拓展篇—音频处理(音乐播放器3)

    iOS开发拓展篇—音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewCont ...

  5. OpenCV源码分析:RGB到其他色彩空间的转换

    1.流程调用图 2.部分代码分析 //模板函数进行颜色空间的转换 template <typename Cvt> void CvtColorLoop(const Mat& src, ...

  6. tomcat 一个项目在本机和办公室以外电脑服务器上搭建出现乱码问题

    插入数据库都是???乱码 页面浏览之前在本机插入的数据都是正常的 修改conf目录下的server.xml文件 转义字符集 为 GBK  或 UTF-8 utf-8 即 添加 URIEncoding= ...

  7. golang的第一个deadlock

    package main import (     "fmt"     "math/rand" ) func push(c chan []int) {      ...

  8. WebStorm phpStorm 注册码

    WebStorm User or company Name: EMBRACE ===== LICENSE KEY===== 24718-12042010 00001h6wzKLpfo3gmjJ8xoT ...

  9. C语言基础--进制

    进制表示: // 1.默认就是10进制 ; // 2.在前面加上一个0就代表八进制 ; // %d是以十进制的方式输出一个整数 printf("%d\n", num1); // % ...

  10. 常用排序算法的Java实现 - 1

    学习编程语言时, 我们会接触到许多排序算法, 这里总结了一下常见的排序算法. 不定期更新. * 其实在Java中存在如Collections.sort()这样的方法来自动为我们排序, 不过学习排序算法 ...