2017-05-18 19 views
0

関連エンティティを持つエンティティをDTOに変換するための良い方法について質問したいと思います。DTOに関連するエンティティを持つエンティティ

だから、例えば私は3 enitiesを持っている:

@Entity 
@Table 
public class First { 
    @Id 
    private int id; 

    @OneToMany(mappedBy = "first") 
    ... 
    private List<Second> second; 

    @ManyToOne 
    ... 
    private Third third; 


@Entity 
@Table 
public class Second { 
    @Id 
    private int id; 

    @ManyToOne 
    ... 
    private First first; 

    @OneToMany(mappedBy = "second") 
    ... 
    private List<Third> third; 



@Entity 
@Table 
public class Third { 
    @Id 
    private int id; 

    @ManyToOne 
    ... 
    private Second second; 

    @OneToMany(mappedBy = "third") 
    ... 
    private List<First> first; 

DTOのにこれらのすべてを変換するためのベストプラクティスは何ですか? 私は外部ライブラリを使いたくありません。

問題は、その反復性とネストされたアソーションがあることがわかります。

ご挨拶。

編集: 自分で使用するDTOマッピングのライブラリの名前を教えてもらえますか?

+1

を構築

、通常、関連分野を解決するための反射が関与し、順番にマップ内の参照を保存しますサイクルを解決する。 これは通常、非常に時間のかかるプロジェクトになり、実際にはホイールを再発明する可能性が高くなります。代わりに適切なマッピングライブラリを探すことを強くお勧めします。 –

+0

だから、これを行う良い方法はありませんか?あなたは私にその図書館の名前を教えてもらえますか?私はインターネット上でいくつかを見つけましたが、多分あなたはあなたの経験から私に1つを与えることができます。 – Razikus

+1

私は[Dozer](http://dozer.sourceforge.net/)で良い結果を得ました。非常に複雑なユースケースであっても、設定は比較的容易で、カバーもしています。サイクルや継承を簡単に処理します。 –

答えて

2

これは役立つかもしれない:

私はサイクルを(にStackOverflowErrorが発生する)を回避するためのカスタムDTOを使用することをお勧めします。あなたが転送しているコンテンツを管理する利点。上記のエンティティクラスを使用して、以下のようにdtoを構築しました。

私は私のビルドに
などのロンボク島の依存 "org.projectlombok" % "ロンボク島" %lombokVersion

を持っています。 DTOおよびその逆へのエンティティからのこのようなマッピングは、常にいくつかの非自明なマッピングコードを煮詰めるます私のカスタムDTO

@Data 
public class FirstDTO implements Jsonable { 
    protected String id; 
    protected ThirdDTO third; 

    public FirstDTO(){} 

    @JsonCreator 
    public FirstDTO(@JsonProperty("id") String id, 
        @JsonProperty("third") Third third){ 
      this.id = id; 
      this.third = third; 
    } 
} 
関連する問題