EntityMapping

7208 ワード

Entity Mapping


M:N関係でない場合は、1つのオブジェクトでテーブルのFKを管理します.
=>FKの管轄オブジェクトは、関連関係において所有者である
関連関係の所有者

  • 関連関係の所有者エンティティは、外部キーを登録、変更、削除できます.

  • ご主人様以外のEntityは読み取り専用です
  • Annotationの使用


  • @Table(name=...)

  • エンティティをテーブルに登録する場合...名前を
  • に設定

  • @ID

  • このフィールドをPK
  • に設定
  • @GeneratedValueは、単独で使用することなくプライマリ・キー
  • を直接割り当てることができます.

  • @GeneratedValue(strategy = GenerratedValue.~)


  • @IDを使用してプライマリ・キーを自動的に生成

  • IDENTITY:プライマリ・キー生成をDBに委任し、自動増分

  • SEQUNCE

  • TABLE

  • AUTO

  • @Column(name = ..., nullable=..., length=...)

  • フィールド(列)の名前、Null値、および長さを設定する

  • @JoinColumn


  • 1対のマルチリレーションシップマッピングでは、

  • DBの観点からFKを管理し,ターゲットテーブルのPKを示す.

  • すなわち,@JoinColumnを用いたクラスは関連関係の所有者である.
  • @Entity
    class Member {
    	@Id @GeneratedValue
        	private Long member_id;
            @ManyToOne
            @JoinColumn(name="team_id")
            private Team team;
            ...
    }
    
    @Entity
    class Team {
    	@Id @GeneratedValue
        	private Long team_id;
            ...    
    }
    =>>オブジェクトをFKとして読み込む
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "id")
    private List<AnotherObject> anotherObjects;
    =>>1:マッピングの場合はlistを使用

  • @mappedBy

  • は主に双方向関連関係に使用される
    ManyToOneとは異なり、
  • @
  • は非関連クラスで使用されます.
  • 「私は相対クラスに関連付けられたクラスです.しかし、私の外部キーは相対クラスです.相対クラスは関連関係の主人です.」
  • @Entity
    class Member {
    	@Id @GeneratedValue
        	private Long member_id;
            @ManyToOne
            @JoinColumn(name="team_id")
            private Team team;
            ...
    }
    
    @Entity
    class Team {
    	@Id @GeneratedValue
        	private Long team_id;
            @OneToMany(mappedBy = "team")
            private List<Member> members = new ArrayList<>();
            ...    
    }
    =>mappedBy="team"は、メンバークラスがTeamオブジェクトを持ち、関連関係の所有者であることを示します.
    ==>双方向関係で使用

  • @JoinTable


    2つのテーブル間の関連付けを管理するときに、個別のテーブルを作成する場合は、
  • を使用します.

  • 関連メソッド


  • 双方向の関連付けでは、2つのオブジェクトに同時に注意する必要があります.

  • 一つの方法の中で双方の関係を確立したほうがいい.

  • このような双方向関係を一度に確立する方法を関連方法と呼ぶ.
  • は実際にはDB上の接続であるが、JPAはオブジェクト向けの観点でEntityをマッピングしているので、相互参照で呼び出すことができるステージは双方向関連
  • である.

  • サービスロジックを記述する場合、PKの一方がFKの一方を参照して値を取得する際に相関関係を設定していないため、相関関係を確立するプロセスが必要であるが、あらかじめメソッド(相関関係便利メソッド)を作成して使用する必要がある.
  • このとき,既存の関連関係を断ち切り,無限ループに陥らせない.