我正在使用Spring框架开发基于REST的JAVA项目。我的一些JPA实体从jackson获得了@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
}
根据上述类关系,我希望仅在我获取@JsonIgnore
时才应用Transactions
。
List<Transactions> transactions = transactionsRepo.findAll()
但是如果我直接获取TransactionDetails,我也需要获取transaction
中的属性TransactionDetail
。
List<TransactionDetail> details = transactionDetailsRepo.findByAccountNo(accountNo);
如何使用@JsonIgnore
执行此操作?或者还有其他正确的方法来实现这个目标吗?
答案 0 :(得分:1)
@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文件中添加依赖项