2017-03-19 7 views
2

私の問題:私は2つのエンティティを持つユーザー - コメント、1つのユーザーは多くのコメントを持つことができます。私はいくつかのコメントをすべて取得する必要があります何かを取得するときですが、それはまた、全体のユーザー行を取得し、私はこのシナリオでは、ユーザー行のマッピングからわずかな列をしたいが、私は完全にJsonIgnoreそのフィールド。Hibernate + rest、コンテキストに応じて1から多くの特定の列のみを取得する

コード例: 私は私はあなたが理解していなかった場合は、おそらくコードは私の問題を明確にします彼らに

を取得する必要がユーザーポストと例えばシナリオは(また、1対多)があるので二つの休止状態のエンティティを持っている: ユーザー:

@Entity 
public class User { 

@Id 
@GeneratedValue 
private Integer id; 

private String username; 

@JsonIgnore 
private String password; 

private String about; 

@JsonIgnore 
@OneToMany(mappedBy="userRef") 
private List<Comment> comments; 
} 

そして、いくつかのコメントエンティティ:

@Entity 
public class Comment { 

@Id 
@GeneratedValue 
private Long id; 

private String text; 

@ManyToOne 
@JoinColumn(name="author_id") 
private User userRef; 
} 

そして、私のクエリをCommentDao内部(私はそれが私の問題とは何かを持っているとは思わないcuzのそれは、これがpost_idのでそれを一致されている理由与えられたポストのthatsのコメントを取得し、私はそれをスキップ):

session.createQuery("from Comment c where c.postRef.id = :post_id") 
        .setParameter("post_id", postId).getResultList(); 

これはJSONを生成します。

[ 
    { 
    "id": 1, 
    "text": "Some comment text", 
    "userRef": { 
     "id": 1, 
     "username": "some_username", 
     "about": "(**I DON'T WANT THIS HERE**) Something about user" 
    } 
    } 
] 

私の希望JSON出力は、すべてがちょうど約ずに同じであるということである:私が試した

[ 
    { 
    "id": 1, 
    "text": "Some comment text", 
    "userRef": { 
     "id": 1, 
     "username": "some_username" 
    } 
    } 
] 

もの:

  • 新しいを使用して
  • をフェッチレイジー()HQLの内側、それはヌル
  • 「約」は、私は1つの応答で返すことを行うことが可能です知っているが、私は、それは「ネストされた」ことにしたいなりますので、 userRefはCommentオブジェクトの一部にすぎません。

同じアプリ内のさまざまなシナリオでは、もう一度「約」を他のものから検索できるようにしたいと考えています。

あなただけのジャクソン、のようなもの使用してUserクラスにラッパーを作成しているので、あなたが他のコンテキストでそのフィールドが必要な場合は、私は任意のヘルプ

答えて

0

を本当に感謝します:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class UserMapper { 

@JsonProperty 
private Integer id; 
@JsonProperty 
private String username; 
} 

を、後でマップこのクラスのユーザーを使用してJsonを生成します。

関連する問題