JPA継承関係のマッピング、Enumの使用
4688 ワード
ドメインモデルとテーブル
Entityでは、Album、Book、MovieがItemを継承します.
継承ポリシーとして、テーブルポリシーを使用して、Album、Book、Movie情報がItemテーブルに格納されます.DTYPEでAlbum、Book、Movieを区別します.
参考として、継承戦略には以下のような署名戦略もある.結合ポリシーはストレージスペースを有効に使用しますが、クエリーで使用される結合が多いため、単一のテーブルポリシーよりも速度が遅くなります.
推奨されませんが、下図に示すように、クラスごとにテーブルポリシーがあります.
Domain
親エンティティ
@Inheritance
親エンティティ
@Inheritance
指定
サブエンティティ
親レベルItemを継承し実現した.
@DiscriminatorValue
DTO
DTO
Album、Book、Movieのすべてのフィールドを含むDTOを作成し、画面からItemの値を取得します.
ItemDTOに関数を作成し、enumを使用してAlbum、Book、Movie Entityを作成します.
Enum
ItemのタイプをA、B、Mの値に分けますが、enumは簡単に作成できます.public enum ItemType {
ALBUM("A"),
BOOK("B"),
MOVIE("M");
private final String itemTypeKey;
ItemType(String itemTypeKey) {
this.itemTypeKey = itemTypeKey;
}
//String인 Item Type Key를 넣으면 ItemType으로 변환해준다.
//예를 들어 "A"를 넣으면 ItemType인 ALBUM으로 바꿔준다.
public static ItemType fromString(String itemTypeKey) {
for (ItemType i : ItemType.values()) {
if (i.itemTypeKey.equalsIgnoreCase(itemTypeKey)) {
return i;
}
}
return null;
}
}
View
商品の種類を選べば、種類によってスタイルが異なります.
var itemMain = {
init : function () {
var _this = this;
$("#itemType").on("change", function(){
_this.itemTypeChange();
});
_this.itemTypeChange();
},
itemTypeChange : function(){
var itemType = $("#itemType option:selected").val();
switch(itemType){
case 'A':
$("#div-album").css("display", "block");
$("#div-book").css("display", "none");
$("#div-movie").css("display", "none");
break;
case 'B':
$("#div-album").css("display", "none");
$("#div-book").css("display", "block");
$("#div-movie").css("display", "none");
break;
case 'M':
$("#div-album").css("display", "none");
$("#div-book").css("display", "none");
$("#div-movie").css("display", "block");
break;
}
}
}
itemMain.init();
Controller
VIEWは、ItemDTOに対してItem情報を受信し、サービスに伝達する.
Service
サービス内のItemDTOをEntityに変更し、Repositoryに渡します.
Repository
Itemを登録します.
選択した場合、Item.classに設定しても、DTYPEに従ってAlbum、Book、Movieクラスにデータを入れて返します.
Database
DBをチェックすると、次のように1つのテーブルにDTYPEがItem Typeで区切られていることがわかります.
Reference
この問題について(JPA継承関係のマッピング、Enumの使用), 我々は、より多くの情報をここで見つけました
https://velog.io/@minji104/JPA-상속-관계-매핑-Enum-사용
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public enum ItemType {
ALBUM("A"),
BOOK("B"),
MOVIE("M");
private final String itemTypeKey;
ItemType(String itemTypeKey) {
this.itemTypeKey = itemTypeKey;
}
//String인 Item Type Key를 넣으면 ItemType으로 변환해준다.
//예를 들어 "A"를 넣으면 ItemType인 ALBUM으로 바꿔준다.
public static ItemType fromString(String itemTypeKey) {
for (ItemType i : ItemType.values()) {
if (i.itemTypeKey.equalsIgnoreCase(itemTypeKey)) {
return i;
}
}
return null;
}
}
商品の種類を選べば、種類によってスタイルが異なります.
var itemMain = {
init : function () {
var _this = this;
$("#itemType").on("change", function(){
_this.itemTypeChange();
});
_this.itemTypeChange();
},
itemTypeChange : function(){
var itemType = $("#itemType option:selected").val();
switch(itemType){
case 'A':
$("#div-album").css("display", "block");
$("#div-book").css("display", "none");
$("#div-movie").css("display", "none");
break;
case 'B':
$("#div-album").css("display", "none");
$("#div-book").css("display", "block");
$("#div-movie").css("display", "none");
break;
case 'M':
$("#div-album").css("display", "none");
$("#div-book").css("display", "none");
$("#div-movie").css("display", "block");
break;
}
}
}
itemMain.init();
Controller
VIEWは、ItemDTOに対してItem情報を受信し、サービスに伝達する.
Service
サービス内のItemDTOをEntityに変更し、Repositoryに渡します.
Repository
Itemを登録します.
選択した場合、Item.classに設定しても、DTYPEに従ってAlbum、Book、Movieクラスにデータを入れて返します.
Database
DBをチェックすると、次のように1つのテーブルにDTYPEがItem Typeで区切られていることがわかります.
Reference
この問題について(JPA継承関係のマッピング、Enumの使用), 我々は、より多くの情報をここで見つけました
https://velog.io/@minji104/JPA-상속-관계-매핑-Enum-사용
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
サービス内のItemDTOをEntityに変更し、Repositoryに渡します.
Repository
Itemを登録します.
選択した場合、Item.classに設定しても、DTYPEに従ってAlbum、Book、Movieクラスにデータを入れて返します.
Database
DBをチェックすると、次のように1つのテーブルにDTYPEがItem Typeで区切られていることがわかります.
Reference
この問題について(JPA継承関係のマッピング、Enumの使用), 我々は、より多くの情報をここで見つけました
https://velog.io/@minji104/JPA-상속-관계-매핑-Enum-사용
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
DBをチェックすると、次のように1つのテーブルにDTYPEがItem Typeで区切られていることがわかります.
Reference
この問題について(JPA継承関係のマッピング、Enumの使用), 我々は、より多くの情報をここで見つけました https://velog.io/@minji104/JPA-상속-관계-매핑-Enum-사용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol