🅙🅟🅐 04.


📍 関連関係マッピング


  • オブジェクトとテーブルの関連付けの違い


    🔻 表をモデリングするオブジェクト
  • オブジェクトをデータ中心にモデリングすると、コラボレーション関係(関連関係)を作成できません.
    理由
  • 表外部キー結合
  • を使用
  • オブジェクト使用参照

  • 方向に関連する関係のタイプ


    1.一方向関連

  • コードの例
    @Entity
    public class Member {
    
        @Id @GeneratedValue
        private Long id;
        
        @Column(name = "USER_NAME")
        private String name;
        
        private int age;
    
        @ManyToOne
        @JoinColumn(name = "TEAM_ID")
        private Team team;
        ...
    }
    
    @Entity
    public class Team {
    
        @Id @GeneratedValue
        private Long id;
        
        private String name;
        ...
    }
      
  • @ManyToOne:多対一関係の「多」(通常は外部キーに表示)
  • @JoinColumn(name="TEAM ID"):マップされたコラム名を表示する
  • 2.双方向関連


  • オブジェクトは、2つのオブジェクトの1つで外部キーを管理する必要があります(関連関係の所有者を決定します).
    理由
  • オブジェクトの双方向関係:2つの異なる一方向関係
  • を作成する必要があります.
  • 表:単一外部キー関連管理

  • 双方向マッピング規則
    1.関連カニの所有者としてオブジェクトの2つの関係の1つを指定
    2.外部キーを管理するのは、関連関係の所有者のみです
    3.非マスターは読み取り専用(mappedByプロパティを使用)
    4.外来キーのある場所をご主人様に指定!

  • コードの例
    ```java
    @Entity
    public class Member {
    
        @Id @GeneratedValu
        private Long id;
    
        @Column(name = "USER_NAME")
        private String name;
    
        private int age;
    
        @ManyToOne
        @JoinColumn(name = "TEAM_ID")
        private Team team;
        ...
    }
    
    @Entity
    public class Team {
    
        @Id @GeneratedValue
        private Long id;
    
        private String name;
    
        @OneToMany(mappedBy = "TEAM")
        List<Member> members = new ArrayList<Member>();
        ...
    }
    
    ```
  • @OneToMany(mappedBy="TEAM"):多対一の関係で「日」:関連するコラム名とマッピング(関連するメインコラム)
  • に対応

  • 双方向関連の注意事項
  • の純オブジェクト状態を考慮すると、常に両端に値
  • が設定.
    作成方法
  • 関連編
  • 双方向マッピング時無限ループ注意

  • 双方向マッピングの一般的なエラー

  • 逆方向(主方向以外)のみ関連付けを設定
    Team team = new Team();
    team.setName("TeamA");
    em.persist(team);
    
    Member member = new Member();
    member.setName("member1");
    //역방향(주인이 아닌 방향)만 연관관계 설정
    team.getMembers().add(member);
    em.persist(member);

  • 純粋なオブジェクト関係を考慮して、常に2つの多値を入力する必要があります.
    Team team = new Team();
    team.setName("TeamA");
    em.persist(team);
    
    Member member = new Member();
    member.setName("member1");
    //역방향(주인이 아닌 방향) 연관관계 설정
    team.getMembers().add(member);
    //연관관계의 주인에 값 설정
    member.setTeam(team); 
    em.persist(member);

  • 「関連関係」を使用すると便利な方法で、所有者の値しか入力できません.
    // Team Class 에서
    // 연관관계 편의 메소드
        public void setTeam(Member member) {
        this.member = member;
        member.getOrders().add(this);
      }
      
    // ✔ changeTeam() 이런 식으로 이름 바꾸면 더 좋음