🏑
JPAのフィールドとカラムのマッピング
フィールドとカラムのマッピング
@Column
- Javaのフィールドとデータベースのカラムをマッピングしてくれるアノテーション
@Entity
public class Member {
// DBのNAMEカラムとマッピングする。
@Column(name = "NAME")
private String userName;
}
-
@Column
を付けない場合フィールド名そのままマッピングされる。
@Entity
public class Member {
// DBのuserNameカラムとマッピングされる
// Springと一緒に使用するとuser_nameカラムとマッピングされる。
private String userName;
}
属性 | 説明 | ディフォルト値 |
---|---|---|
name | フィールドとマッピングするカラムの名前 | フィールド名 |
insertable, updatable | 登録、変更可能かどうか | TRUE |
nullable(DDL) | nullを許すかどうか、falseに設定する場合DDL自動生成時にnot null制約が追加される | ---- |
unique(DDL) |
@Table のuniqueConstraints とほぼ一緒 |
---- |
columnDefinition(DDL) | DBのカラム情報を直接付与できる | ---- |
length(DDL) | 文字の長さの制約を追加,Stringにだけ有効 | 255 |
precision,scale(DDL) | BigDecimal,BigIntegerの長さ指定可能 | precision = 19, scale = 2 |
-
name
: 指定した名前をDBのカラムとマッピングする。- DDL自動生成機能を使う場合
name="指定した名前"
指定した名前でDBにカラムが生成されそのカラムとマッピングする。 - spring bootと一緒に使うとキャメルケースが小文字アンダースコア方式に自動的に変わる。
- camelCase → under_score 例)java field :
userName
-> DB column :user_name
)
- DDL自動生成機能を使う場合
-
unique
は@Table
にて指定する事をお勧めする、その理由はUnique keyの名前を指定することが出来ないからです -
columnDefinition
: DDLをそのまま埋め込む事ができる.
@Column(columnDefinition = "varchar(50) default 'EMPTY'")
-
precision,scale(DDL)
: precisionは小数点を含む全体桁数、scaleは小数点以下の桁数
@Enumerated
- Javaのenumタイプとマッピングするときに使用する。
@Entity
public class Customer {
// CustomerStatus PLATINUM, VIP, BASIC,
@Enumerated(EnumType.STRING)
private CustomerStatus status;
}
enumタイプを使うときは必ず
EnumType.STRING
を使用する事をお勧めする。
属性 | 説明 | ディフォルト値 |
---|---|---|
value |
EnumType.ORDINAL : enumタイプの順番をDBに保存、0,1,2.. EnumType.STRING : enumタイプの名前をDBに保存, SAVE,CANCEL.. |
EnumType.ORDINAL |
@Temporal
- Dateタイプをマッピングするときに使用する(java.util.Date, java.util.Calendar)
@Entity
public class Order {
@Temporal
private Date date;
}
- Java8以後の
LocalDate
,LocalDateTime
には使用しない.(最新Hibernateの支援)- 今の時代を考えると
LocalDate
を使用するのが当たり前
- 今の時代を考えると
属性 | 説明 | ディフォルト値 |
---|---|---|
value |
TemporalType.DATE : DBのdateタイプとマッピングする。 TemporalType.TIME : DBのtimeタイプとマッピング |
---- |
@Lob(Large Object)
- データベースのBLOBタイプとマッピング
- マッピングするフィールドタイプが文字ならCLOBマッピング、他はBLOBマッピング。
-
CLOB
: <-String
,char[]
, java.sql.CLOB -
logtext
(MySQL) : <-String
-
BLOB
: <-byte[]
, java.sql. BLOB*
// MySQLの場合longtextにマッピングされる。
@Lob
private String description;
参考 :
Lobとは? データベースに保存される多様なタイプのデータの中で構造化されてないテータを扱うためのタイプ。
@Transient
- データベースに保存または照会しないフィールドに使用。(マッピングしたくないフィールドに使用)
- 主にメモリ上で仮にある値を保存したい時に使用する
@Entity
public class Order {
@Transient
private Long temp;
}
(次)主キーマッピング
Discussion