基本編(4)-マップエンティティ

4127 ワード

オブジェクトとテーブルのマッピング


@Entity


@Entityを持つクラスは、エンティティと呼ばれるJPAによって管理されます.
JPAマッピングテーブルを使用するクラスは必須です.
*注意事項*
-デフォルトの作成者が必要
-finalクラス、enum、interface、内部クラスXの使用

整理@Entityプロパティ


  • name
    JPAで使用されるエンティティ名.デフォルトはクラス名です.デフォルト値の使用を推奨

  • @Table
    エンティティにマッピングするテーブルの指定
    - name
    - catalog, schema, uniqueConstraints
  • データベース・モードの自動作成

  • モードとは?
    データベース構造
  • は、データベース内のデータの記憶構造を表す
    出典:https://jwprogramming.tistory.com/47[開発者を求めるプログラマー]
  • DDL:テーブルなどのデータ構造を定義するコマンド
  • シナリオの自動作成:
    これは、アプリケーションの実行時にDDLが自動的に生成され、オブジェクト中心のテーブル開発が可能になることを意味します.
    しかし、開発段階でしか使用できません.

    •開発初期フェーズはcreateまたはupdate
    •テストサーバが更新または検証できる
    •ダンプおよび本番サーバはvalidateまたはnone
    DDL生成機能は、DDLの自動生成時にのみ使用され、JPAの実行ロジックには影響しません.

    フィールドとカラムのマッピング

  • 列:テーブル内の列、すなわちテーブル内のコンポーネント
  • マッピング宣言のクリア

  • @Column
    name:フィールドにマッピングするテーブルのカラム名
    -default=オブジェクトのフィールド名
    挿入可能、更新可能:登録が変更可能かどうか
    - default = True
  • 空き可能(DDL):空き値を許可するかどうか
    unique(DDL):@TableのuniqueConstraaintsと同じです.
    columnDefinition(DDL):データベース列情報を直接提供できます.フィールドのjavaタイプと方言情報を使用する必要があります
    ex) varchar(100) default ‘EMPTY'
    length(DDL):Stringタイプにのみ使用される文字長制約.255
    精度、scale(DDL):BigDecimalタイプ(BigIntegerでも使用可能).
    精度は小数点を含む全桁数,scaleは小数点数である.非常に大きな数の処理に使用
    precision=19,
    scale=2
  • @Temporal
    日付タイプマッピングの場合、最新の高バージョンは
  • を省略できます.
  • @Enumerated
    Javaenumタイプのマッピングに使用
    -> EnumType.STRING:enum名をデータベースに保存する
    必ずSTRINGタイプを使います!
  • @Lob( Large Object)
    マッピングされたフィールドタイプが文字である場合、CLOBがマッピングされ、残りのフィールドはBLOB
  • がマッピングされる.
  • @Transient
    データベースに格納、クエリーを行わず、主にメモリで値を処理したい場合に使用されます.
  • プライマリ・キーのマッピング


    デフォルトのキーマッピング宣言

  • @Id
  • @GeneratedValue
  • プライマリ・キーのマッピング方法

  • 直接割当:
  • Idのみ
  • 文字の同姓(@GenerateValue)
    •IDENTITY:データベースへの委任、MYSQL
    -IDENTITYポリシーは、em.persist()ポイントでINSERT SQLを実行し、DBで識別子を問合せます.•SEQUENCE:データベースでクイーンズオブジェクト(順番に割り当てられたデータベース内のオブジェクト)を使用する->@シーケンスジェネレータ
    @Entity 
    @SequenceGenerator( 
    name = “MEMBER_SEQ_GENERATOR", 
    sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
    initialValue = 1, allocationSize = 1)
    •TABLE:テーブルを使用して鍵を生成
    -> TableGenerator
  • @Entity 
    @TableGenerator( 
     name = "MEMBER_SEQ_GENERATOR", 
     table = "MY_SEQUENCES", 
     pkColumnValue = “MEMBER_SEQ", allocationSize = 1) 
    •AUTO:方言による自動指定、デフォルト値
    -AUTO INCREMENTデータベースでINSERT SQLを実行すると、ID値がわかります

    推奨識別子ポリシー


  • デフォルト鍵制約:X、null Xの変更

  • 提案:Long兄+代替鍵+鍵生成ポリシーを使用する
    スタンバイキー<->ナチュラルキー(たとえば、ID番号)