[JPA]Java ORM標準プログラミング#4のクリーンアップ
この文章は金英漢の「java ORM標準プログラミング」教材に基づいて整理された。
JPAのコアコンセプト:エンティティとテーブルマッピング~について議論します.🤸
マッピング宣言
@Entity
JPAを使用して、テーブルにマッピングするクラスに使用します.
ツールバーの
@Table
エンティティにマッピングするテーブルを指定します.
ツールバーの
モード自動作成設定
JPAはクラスのマッピング情報によりデータベースごとに自動的にパターンを生成する機能をサポートしている.
次の設定により、アプリケーションの実行時にデータベース・テーブルを自動的に作成できます.
spring:
jpa:
hibernate:
ddl-auto: create
上の図に示すように、設定後の実行時にコンソールに出力されるモード生成ログ.既存のテーブルを削除して再生します.drop table if exists member;
create table member (
member_id bigint not null,
city varchar(255),
street varchar(255),
zipcode varchar(255),
username varchar(255),
primary key (member_id)
)
hibernate.ddl-autoプロパティ
本番環境では、DDLのオプション(create、create-dop、updateなど)を変更すると、実際に使用しているテーブルやカラムを削除できますので、これらのオプションは使用しないでください。
以上の設定は、環境に応じて適切な値を使用する必要があります.一般的に推奨されるシナリオポリシーは以下の通りです.
制約の追加
エンティティに関連する制約が追加されている場合は、@Columnのプロパティを使用して設定できます.
@Entity
public class Member {
@Id
@Column(name="member_id")
private Long id;
@Column(nullable = false, length = 20)
private String username;
...
}
自動生成されたDDLのユーザー名にnot null制約条件と長さを指定できます.生成されたDDLは次のようになります.create table member (
member_id bigint not null,
city varchar(255),
street varchar(255),
zipcode varchar(255),
username varchar(20) not null,
primary key (member_id)
)
@TableのuniqueConstraintsプロパティで特別な制約を付与することもできます.@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(
name = "ID_NAME_UNIQUE",
columnNames = {"MEMBER_ID", "USERNAME"}
)
})
public class Member {
@Id
@Column(name="member_id")
private Long id;
@Column(nullable = false, length = 20)
private String username;
...
}
生成されたDDLは次のようになります.alter table member
add constraint ID_NAME_UNIQUE unique (member_id, username)
上記の機能はDDL生成時のみ使用され、JPAの実行ロジックには影響しません.したがって、モード自動生成機能を使用しなければ、上記の設定は不要となる.プライマリ・キー・マッピング・ポリシー
データベースごとにプライマリ・キーを生成する方法が異なり、JPAはプライマリ・キー・マッピング機能を提供します.
@Entity
public class Member {
@Id
private Long id;
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
フィールドとカラムのマッピング
@Enumerated
Javaをマッピングするためのenumタイプ.
各メンバにアドレス情報があると仮定すると,アドレス情報はJPA enum言語で以下のように表現できる.
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name="member_id")
private Long id;
private String username;
@Embedded
private Address address;
}
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
お読みいただきありがとうございます~:)Reference
この問題について([JPA]Java ORM標準プログラミング#4のクリーンアップ), 我々は、より多くの情報をここで見つけました https://velog.io/@y__hi_24/JPA-자바-ORM-표준-프로그래밍-정리-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol