8.価格タイプ


1.デフォルトのタイプ

  • 識別子がなく、値のみで、変更時に
  • を追跡できません.
  • ライフサイクルは、エンティティ
  • に依存します.
  • 値タイプは安全で、共有されている場合はX->不変オブジェクトとして作成されます.
  • Rapperクラスは共有可能です.注意:
  • 2.埋め込み式

  • は、新しい値タイプ
  • を直接定義することができる.
  • の利点
  • は、
  • を繰り返し使用することができる.
  • 高凝集度
  • は、この値タイプのみを使用する有意義な方法
  • を作成することができる.
    ライフサイクルは、
  • 埋め込みタイプの
  • を含むすべての値タイプのエンティティに依存する.
  • imbeddyタイプを生成するマッピングされたテーブルは同じ
  • である.
  • オブジェクトとテーブルの正確なマッピング
  • 設計の良好なORMのクラス数はマッピングのテーブル数より
  • 多い.
  • 冗長埋め込みタイプを使用するには、@AttributeOverride
  • を参照してください.

    3.比較値タイプ

  • 同一性比較>>インスタンスの参照値比較(==)
    =ピア比較>>インスタンスの値比較(等しい)
  • 4.値タイプの集合


    @ElementCollection
    @CollectionTable(name = "FAVORITE_FOODS",
                joinColumns = @JoinColumn(name="MEMBER_ID")
    )
    @Column(name = "FOOD_NAME") // SET 속성이라 나머지 속성이 하나밖에 없어서 설정 가능
    private Set<String> favoriteFoods = new HashSet<>();
    
    @ElementCollection
    @CollectionTable(name = "ADDRESS",
                joinColumns = @JoinColumn(name="MEMBER_ID")
    )
    private List<Address> addressHistory = new ArrayList<>();
    1つ以上の
  • 値タイプを格納する場合は
  • を使用します.
  • データベース・セットは、同じテーブルに格納できません.
  • 値タイプの集合は、永続的な遷移において+孤児オブジェクトを除去する機能を備えなければならないと考えられる.
  • コレクション遅延ロード
  • コレクション修正
  • Member member1 = em.find(Member.class, member.getId());
    Address a = member1.getHomeAddress();
    member1.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode()));
    
    member1.getFavoriteFoods().remove("치킨");
    member1.getFavoriteFoods().add("한식");
  • 値タイプセットの制限
  • 値タイプはエンティティとは異なり、識別子概念はありません.
  • の値を変更すると追跡が困難です.
  • 値タイプのセットが変更された場合、プライマリエンティティに関連付けられたすべてのデータが削除され、値タイプのセットの現在のすべての値が再保存されます.
  • マッピング
  • 値タイプセットのテーブルは、すべてのカラムを組み合わせてプライマリ・キーを構成します:null x、重複ストレージx
    =>したがって、実際の操作では、
  • は集合よりも一対多の関係を重視する