2017-10-04 6 views
0

Je travaille sur un projet JAVA basé sur REST utilisant Spring framework. Certaines de mes entités JPA ont l'annotation @JsonIgnore de jackson pour les propriétés. Exemple ci-dessousComment utiliser @JsonIgnore à appliquer uniquement lorsque l'objet n'est pas l'objet racine?

@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 

} 

Selon la relation de classe ci-dessus, je veux le @JsonIgnore à appliquer que lorsque je vais chercher Transactions.

List<Transactions> transactions = transactionsRepo.findAll() 

Mais si je suis directement les TransactionDetails aller chercher, je dois la propriété transaction dans TransactionDetail à extraire aussi bien.

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

Comment puis-je utiliser le @JsonIgnore pour cela? Ou bien y a-t-il un autre moyen approprié pour y parvenir?

Répondre

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 

} 

Vous pouvez essayer d'utiliser fetchtype comme paresseux, ce qui permet d'extraire la propriété dans l'entité Transaction Detail Entity. mais il ne récupérera pas les données liées à transaction_detail, ce qui signifie que toutes les autres seront nulles. vous pouvez annoter votre entité avec @JsonInclude comme je l'ai fait pour inclure uniquement des valeurs non nulles. et s'il vous plaît ajouter jackson-datatype-hibernate Jar fichiers ou si vous utilisez maven ajouter les dépendances dans le fichier pom

+0

laissez-moi savoir si c'est ce que votre exigence est? –

+0

La raison pour laquelle j'ai mis '@ JsonIgnore' est qu'il crée une boucle lorsque je charge les Transactions et que je les convertis en JSON. Mais, quand je charge les TransactionDetails, j'ai besoin que ce champ soit présent dans JSON. J'espère que votre réponse pourrait aider. Je vais le tester et mettre à jour. – BlueBird

+0

Oui, cela fonctionnerait laissez-moi savoir une fois que vous le tester –