【发布时间】:2021-12-20 14:51:39
【问题描述】:
我被困在给定的场景中:
共有三个实体
a) 账单(与供应商的多对一关系)[双向]
b) 供应商(与供应商和供应商银行的一对多关系)
c) VendorBank(与供应商的多对一关系)[单向]
账单:显示有限的字段
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@Table(name="bill_details")
public class Bills {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="bill_id")
private int bill_id;
@Column(name="bill_no")
private String billno;
@ManyToOne(cascade = {CascadeType.MERGE})
@JoinColumn(name="b_vendor_id")
private Vendors vendors;
/* Args contructor code here */
@JsonManagedReference
public Vendors getVendors() { return vendors; }
VendorBank:显示有限的字段
public class VendorBank {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="v_bank_id")
private int vendorBankId;
@Column(name="v_acc_no")
private String accountNumber;
@Column(name="v_vendor_id")
private int vendor_id;
/*Both constructor code here*/
}
供应商类别:仅显示 imp 字段
/*Lombok code here*/
public class Vendors {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="vendor_id")
private int vendor_id;
@Column(name="vendor_name")
private String vendor_name;
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name="v_vendor_id")
private List<VendorBank> vendorBank;
@OneToMany(mappedBy = "vendors",cascade = {CascadeType.DETACH,CascadeType.MERGE,
CascadeType.PERSIST,CascadeType.REFRESH})
private List<Bills> bills;
@JsonBackReference
public List<Bills> getBills() {
return bills;
}
//@JsonManagedReference()
// @JsonIgnore
public List<VendorBank> getVendorBank() {
return vendorBank;
}
输出:
{
"bill_id": 102,
"billno": "B-858",
"vendors": {
"vendor_id": 3,
"vendor_name": "ABC Company",
"vendorBank": [
{
"vendorBankId": 14,
"accountNumber": "502998745002",
"vendor_id": 3
}
]
}
}
1.当我调用供应商端点时,我会根据需要从供应商 + 供应商银行获取数据。
2.但是当我调用 Bill 端点时,我会从 Bill + vendor + vendorbank 中获取数据,如上所述。 我不希望供应商银行来。[如果我在 vendorbank 上使用 JsonIgnore,那么我会得到正确的输出,但是上面的第 1 点出错了]
【问题讨论】:
标签: java json spring-boot hibernate spring-mvc