2017-11-19 8 views
0

ドメインにdtoをマッピングし、そのオブジェクトにサイクルがある場合のバックグラウンドをマップするベストプラクティスは何ですか? Userオブジェクト:ドメインモデルをDTOにマッピングするサイクル

public class User { 
    private int id; 
    private String firstname; 
    private String lastname; 
    private List<Order> orders; 
    // ... some other properties and getters and setters 
} 

とOrderオブジェクト:

public class Order { 
    private int id; 
    private User owner; 
} 

がどのように私はのDTOにこれらのドメインモデルをマッピングする必要がありますか?例えば、私はこれらの2つのオブジェクトを持っていますかここに私のマッピング機能の例です。

public UserDTO userToDto(User user) { 
    UserDTO dto = new UserDTO(); 

    dto.setIs(user.getId()); 
    dto.setFirstname(user.getFirsname()); 
    dto.setLastname(user.getLastname()); 

    List<OrderDTO> ordersDto = new List<OrderDTO>(); 

    for (Order order : user.getOrders()) { 
     OrderDTO orderDto = new OrderDTO(); 
     orderDto.setId(order.getId()); 
     orderDto.setUser(...) // what I should I set here? 

     ordersDto.add(orderDto); 
    } 

    dto.setOrders(ordersDto); 

    return dto; 
} 

私はorderDto.setUser(...)機能に問題があります。あなたはベストプラクティスを私に見せてもらえますか?ユーザーのマッピングプロパティをステップバイステップで開始すると、実際にマッピングしているOrdersマッピングが終了し、サイクルが作成されます。答えをありがとう。

+0

これらのDTOをJSONまたはXMLにシリアル化することを前提としています。サイクルがあるとどうなりますか?あなたは何を推測していますか? –

+0

まだサービスを作成していません。私は学校のプロジェクトに仕事を任せるだけで、私は実装を考えています。ユーザープロパティをuserToDto関数に実装し始めると、これらのプロパティの1つがList of Ordersであるため、次はUserのようなOrderのプロパティのマッピングを開始しました。そして私の質問は、これを回避する方法とベストプラクティスです。私はより明確に説明してくれることを願っています。 –

+0

@davidxxx OrderDTOにはUserではなくUserDTOの参照があるため、コードは使用できません。 UserプロパティからUserDTOプロパティへのマッププロパティが必要です。 –

答えて

0

まずはクライアント側でも関係が必要だと思います。それ以外の場合は、サイクルに問題はありません。 さらに、UserDTOとOrderDTOの両方を所有しているとします。ここで、OrderDTOにはUserDTOがメンバーとしてあり、UserDTOにはOrderDTOのリストがあります。

あなたは、単に今、あなたはあなたが(例えば休憩を使用して)クライアントにDTOを送信するときに処理する必要がサイクルを取得

orderDTO.setUser(dto); // where dto is the UserDTO created initially. 

を設定する必要が私見。 JPA側では、@OneToOne(Orderで)と@OneToMany(Userで)アノテーションのようなものがあるでしょう。

JSON処理にjacksonをおすすめします。もしあなたがそうであれば、あなたは使用できます

// in UserDTO 
@JsonManagedReference 
private List<Orders> orders; 

// in OrdersDTO 
@JsonBackReference 
private UserDTO owner; 

私はこれが助けてくれることを願っています!

関連する問題