[JPA緊急学習(3)]フィールドとコラムマッピング


    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private Double latitude;

    @Column(nullable = false)
    private Double longitude;
クラス内のこのような状況

1. @Column


@Columnオブジェクトフィールドを表バーにマップします.
テーブル全体ではなく、実際のレポートにマッピングされます.
宣言後に指定できるその他の属性は、次のとおりです.
(1) name
(2) nullable
(3) unique
(4) columnDefinition
(5) length
(6) precision, scale
(2)~(6)はDDLにおける制約条件の意味である.
(2)デバッガが空であることを許可する.
not nullを指定すると、
@Column(nullable = false)
そうですか.
(3)一意
UniqueConstraintsと同じですが、1つのコラムでのみ使用されます.
2つ以上のコラムがユニークキーになっている場合は、クライスレベル@Tableです.uniqueConstraintsを使用します.
(4)columnDefinitionは
コラムのドメイン名を直接指定
@Column(columnDefinition = "varchar(100) default 'EMPTY'") 
private String data;
では
DDLクエリ文はdata varchar(100)default「EMPTY」になります.
(5)長さ
文字長制約.既定値は255です
(★★★★本にはこれだけしか書かれていませんが、255バイトか2バイト255個★★★★★を確認する必要があります)
Stringタイプでのみ使用
@column(length=400)
private String data;
これでDDLはdatavarchar(400)になります.

2. @Enumerated


これはjavaでenumタイプをマッピングするときに使用します.
指定できる属性はORDINAL、STRINGです.
まずはSTRING
@Enumerated(EnumType.STRING)
private RoleType roleType;
言ったのに.
member.setRoleType(RoleType.ADMIN)
そうすると、DBに文字ADMINが格納されます.
つまり、アレンジ後はEnumTypeです.STRINGはenum名で文字を格納します.逆に、データベースに格納されているデータ量は、ORDINALよりも大きい.

3. @Temporal


日付タイプのマッピングに使用します.
@Temporal(TemporalType.DATE)
private Date data;
そうでなければ.
@Temporal(TemporalType.TIME)
private Date time;
そうでなければ.
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
では実際にDDLは
date date,
time time,
タイムスタンプがタイムスタンプになります.
JavaのDateタイプは年月日で1分秒ですが、DBには日付(日付)、時間(時間)、タイムスタンプ(日付と時間)の3種類があります.

4. @Transient


これは、フィールドをマッピングしない場合に使用します.
だからDBに保存したり、クエリーしたりしません.
オブジェクトに値を一時的に保持するために使用します.
@Transient
private Integer temp;

5. @Access


これは、JPAがエンティティデータにアクセスする方法を指定します.
等級に達する.
@Entity
@Access(AccessType.FIELD)
public class Member {
   
   @Id
   private String id;
   
   ...

(1)フィールドアクセス


AccessType.FIELDはこのように指定します
フィールドに直接アクセスする方法.
フィールドはプライベートでもアクセスできます.

(2)Propertyアクセス


AccessType.PROPERTYはこのように指定します
訪問者(ゲスト)の使用方法.
@Accessを使用しない場合、@Idに基づく位置決定方法
@Idがフィールドにアタッチされている場合、AccessType.FIELDとなり、クライアントに貼るとAccessTypeです.PROPERTYになる