[解決済み】DTOからエンティティへ、エンティティからDTOへ
2022-02-08 13:11:06
質問事項
プレゼンテーション層との間でDTOを使用してデータを送受信することになりました。 私たちは次のようなレイヤーを持っています。
- ファサード
- アプリサービス
- ドメイン
そして、我々はエンティティをDTOに変換するのに役立つDozerを使用しています。 しかし、私は今2つの質問があります。
- エンティティからDTOへはドーザーを使用できますが、DTOからエンティティへはドーザーを使用できるのでしょうか?もし可能なら、どのように?
- エンティティはどこで作成するのですか?
例えば、私は本を登録しなければなりません。本のエンティティは次のようになります。
Book{
public Book(BookNumber number,String name){
//make sure every book has a business number,
//and the number can't change once the book is created.
this.bookNumber = number;
..
}
}
で、DTOAssemblerを持っています。
BookDTOAssembler{
BookDTO toDAO(bookEntity){
...
}
BookEntiy fromDTO(book DTO,BookRepository bookRepository){
//1.Where should i create book entity?
//2.Is there any effective way to convert dto to entity in java world?
}
}
オプション1
the BookManagedFacade has a registerBook function:
public registerBook(bookDTO){
Book book = BookDTOAssembler.fromDTO(book DTO);
}
//Create book in BookDTOAssembler.fromDTO
public static BookEntiy fromDTO(BookDTO bookDTO,BookRepository bookRepository){
//book is never registered
if (0==bookDTO.getBookID()){
Book book = new Book(bookRepository.generateNextBookNumber(),bookDTO.getName());
}else{
//book is been registed so we get it from Repository
book = bookRepository.findById(bookDTO.getBookID());
}
book.setAuthor(bookDTO.getAuthor);
...
return book;
}
オプション2
the BookManagedFacade has a registerBook function:
public registerBook(bookDTO){
Book book = new Book(bookRepository.generateNextBookNumber(),bookDTO.getName());
book = BookDTOAssembler.fromDTO(book DTO,book);
}
//add another function in BookDTOAssembler.fromDTO
public static BookEntiy fromDTO(BookDTO bookDTO,Book book){
book.setAuthor(bookDTO.getAuthor);
...
return book;
}
どっちがいいんだろう?それとももっと良い方法で実装できるのか...?
解決方法は?
通常、オブジェクト(ドメインエンティティのDTO表現)をサーバーに転送し直すことはありません。なぜなら、そうすると、誰でもDTOに変更を加えてから情報を送り返すことができるため、カプセル化が壊れるからです。
その代わりに、オブジェクトを変更するために使用するサービスインターフェイスを作成する必要があります。 サーバー を使用して、モデルへの変更を適用します。
つまり、サービスは2つのパートに分かれているのです。
- すべてのエンティティのDTO表現をフェッチするために使用されるクエリ部分
- エンティティへの変更を適用するためのコマンド部
関連
-
[解決済み】DTOからエンティティへ、エンティティからDTOへ
-
[解決済み] org.hibernate.PersistentObjectException: 永続化するために渡されたデタッチド・エンティティー
-
[解決済み] Another エンティティのマッピングでカラムが繰り返されるエラー
-
[解決済み] ConfigurationException: プロジェクトのルート・フォルダに cfg.xml リソース [hibernate.cfg.xml] が見つかりませんでした。
-
PersistentObjectException: 永続化例外に渡された離脱したエンティティ
-
問題解決:ロール例外のコレクションを遅延して初期化することに失敗しました。
-
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 解決法
-
[解決済み] Spring MVC + Hibernate: ロードするためのidが必要
-
[解決済み] DAOパターンとRepositoryパターンの違いは何ですか?
-
[解決済み】JPA orphanRemoval=trueとON DELETE CASCADE DML句との相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Hibernateはorg.hibernate.AnnotationExceptionをスローします。エンティティに指定された識別子がありません: com..domain.idea.MAE_MFEView
-
[解決済み】Hibernateの問題 - "マッピングされていないクラスをターゲットにした@OneToManyまたは@ManyToManyの使用"
-
[解決済み] Spring HibernateのDataIntegrityViolationExceptionを解決するにはどうすればよいですか?
-
PersistentObjectException: 永続化例外に渡された離脱したエンティティ
-
問題解決:ロール例外のコレクションを遅延して初期化することに失敗しました。
-
エラー バッチアップデートが予期しない行数を返しました。
-
トランザクションのためにHibernateセッションを開くことができず、データベース接続タイムアウトの解決法
-
[解決済み] Spring MVC + Hibernate: ロードするためのidが必要
-
[解決済み] not-nullプロパティは、NULL値または一時的な値を参照します。
-
error:Found shared references to a collection: