2017-10-04 7 views
0

私はSpringフレームワークを使ってRESTベースのJAVAプロジェクトに取り組んでいます。私のJPAエンティティの中にはプロパティのためのjacksonの@JsonIgnore注釈があります。以下の例。上記のクラスの関係を1としてオブジェクトがルートオブジェクトでない場合にのみ@JsonIgnoreを適用する方法は?

@Entity 
@Table(name="TRANSACTION") 
public class Transaction { 

    @Id 
    @Column(name="SERIAL", length=16) 
    private String serial; 

    @Column(name="NARRATION", length=128) 
    private String narration; 

    @OneToMany(mappedBy="transaction", cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    private List<TransactionDetail> details; 

    // other fields goes here 

} 

@Entity 
@Table(name="TRANSACTION_DETAIL") 
public class TransactionDetail { 

    @Id 
    @Column(name="UUID", updatable=false) 
    private String uuid; 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name="FK_TRANSACTION") 
    private Transaction transaction; 

    @Column(name="ACCOUNT_NO") 
    private int accountNo; 

    // other fields goes here 

} 

、私はTransactionsをフェッチするとき@JsonIgnoreにのみ適用することにしたいです。

List<Transactions> transactions = transactionsRepo.findAll() 

しかし、私は直接TransactionDetailsを取得していた場合、私は同様にフェッチされるTransactionDetailでプロパティtransactionを必要としています。

List<TransactionDetail> details = transactionDetailsRepo.findByAccountNo(accountNo); 

どうすればいいですか?@JsonIgnoreこれを行うにはどうすればよいですか?それとも、これを達成するための他の適切な方法がありますか?

答えて

0
@Entity 
@JsonInclude(JsonInclude.Include.NON_NULL) 
@Table(name="TRANSACTION_DETAIL") 
public class TransactionDetail { 

    @Id 
    @Column(name="UUID", updatable=false) 
    private String uuid; 


    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="FK_TRANSACTION") 
    private Transaction transaction; 

    @Column(name="ACCOUNT_NO") 
    private int accountNo; 

    // other fields goes here 

} 

fetchtypeを遅延として使用すると、トランザクション詳細エンティティでプロパティを取得できます。それはtransaction_detailの関連するデータをフェッチしません。つまり、他のトランザクションはすべてNULLになります。非ゼロ値のみを含めるようにエンティティに@JsonIncludeを付けることができます。 jackson-datatype-hibernate Jarファイルを追加するか、mavenを使用している場合はpomファイルに依存関係を追加してください

+0

これがあなたの要件であるかどうか教えてください。 –

+0

'@ JsonIgnore'を置くのは、トランザクションをロードしてJSONに変換するときにループを作成するということです。しかし、TransactionDetailsをロードすると、このフィールドがJSONに存在する必要があります。あなたの返信が助けてくれることを願っています私はそれを試して更新します。 – BlueBird

+0

はい、これを試してみるとうまくいくでしょう –

関連する問題