zoukankan      html  css  js  c++  java
  • Hibernate之mappedBy【必读】

    【http://www.cnblogs.com/redcoatjk/p/4236445.html】

    一。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)

  • 相关阅读:
    IDEA导入项目后,导入artifacts 方法 以及 Spring的配置文件找不到的解决方法
    Tomcat8中如何内存溢出,如何增大内存?
    SpringSecurity-权限关联与控制
    学习黑马教学视频SSM整合中Security遇到的问题org.springframework.security.access.AccessDeniedException: Access is denied
    SSM项目中,关于Test类中不能使用Autowired注入bean的问题
    spring mvc绑定参数之 类型转换 有三种方式:
    maven缺失ojdbc6解决方案 :Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错
    学习SpringMVC 文件上传 遇到的问题,403:returned a response status of 403 Forbidden ,409文件夹未找到
    【转】Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍
    Protocol buffers--python 实践 简介以及安装与使用
  • 原文地址:https://www.cnblogs.com/dixinyunpan/p/5796871.html
Copyright © 2011-2022 走看看