zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    iOS 页面之间的转场动画控制器间的转换
    C C语言中关键词,以及知识点复习
    iOS Swift基础知识代码
    LeetCode-Kth Smallest Element in a Sorted Matrix
    LeetCode-Design Phone Directory
    LeetCode-Longest Increasing Path in a Matrix
    LeetCode-Pathcing Array
    LeetCode-Wiggle Sort
    LeetCode-Odd Even Linked List
    LeetCode-Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/qiuting/p/7832959.html
Copyright © 2011-2022 走看看