我使用当Hibernate一对多和多对一映射和REST Web服务返回使用JSON到我的挥杆客户数据面临着一些奇怪的问题。JSON无限字符串使用Hibernate一对多和多对一映射REST Web服务时
当我的web服务返回salesOrder对象。我已经检查过它包含了orderlines对象集。但是,如果我打开orderLine对象之一,它又有销售订单对象。
这种链接是造成问题,因为正在被返回的JSON字符串无限客户端。
像下面...
[
{
"salesOrderNumber":"1",
"customerCode":"1",
"totalPrice":50.0,
orderLines":
[
{
"salesOrderNumber":"1",
"productCode":"2",
"quantity":1,
"salesOrder":{"salesOrderNumber":"1","customerCode":"1","totalPrice":50.0,"orderLines":[{"salesOrderNumber":"1","productCode":"2","quantity":1,"salesOrder":{"salesOrderNumber":"1","customerCode":"1","totalPrice":50.0,"orderLines":
.............................................
...............................
我已经尝试设置@JSONIgnore,因为我不希望这些被发送到客户端做的,但是,它并没有帮助。
我的两个实体是象下面这样:
@Entity
@Table(name = "salesorder")
//@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class SalesOrder implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "SalesOrderNumber", unique = true, nullable = false)
private String salesOrderNumber;
@Column(name = "CustomerCode")
private String customerCode;
@Column(name = "TotalPrice")
private double totalPrice;
@JsonIgnore
@OneToMany(fetch = FetchType.EAGER, mappedBy="salesOrder",cascade=CascadeType.ALL)
private Set<OrderLines> orderLines = new HashSet<OrderLines>();
public Set<OrderLines> getOrderLines() {
return orderLines;
}
public void setOrderLines(Set<OrderLines> orderLines) {
this.orderLines = orderLines;
}
public String getSalesOrderNumber() {
return salesOrderNumber;
}
public void setSalesOrderNumber(String salesOrderNumber) {
this.salesOrderNumber = salesOrderNumber;
}
public String getCustomerCode() {
return customerCode;
}
public void setCustomerCode(String customerCode) {
this.customerCode = customerCode;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
}
@Entity
@Table(name = "orderlines")
//@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class OrderLines implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "SalesOrderNumber", unique = true, nullable = false)
private String salesOrderNumber;
@Id
@Column(name = "ProductCode")
private String productCode;
@Column(name = "Quantity")
private int quantity;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name="SalesOrderNumber")
private SalesOrder salesOrder;
public SalesOrder getSalesOrder() {
return salesOrder;
}
public void setSalesOrder(SalesOrder salesOrder) {
this.salesOrder = salesOrder;
}
public String getSalesOrderNumber() {
return salesOrderNumber;
}
public void setSalesOrderNumber(String salesOrderNumber) {
this.salesOrderNumber = salesOrderNumber;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
这是一个真正的** **好主意,把你的实体JSON。在这里阅读更多:http://stackoverflow.com/a/30519514/608820 - 答案是,hibernate重写类,可能'@ JsonIgnore'注释丢失。 – Augusto