有两个多对多关系的实体类
@Entity
public class Station {
private List<Customer> customerList;
private ...
...
@ManyToMany
@JoinTable(name = "customer_station", catalog = "", schema = "examination", joinColumns = @JoinColumn(name = "station_id", referencedColumnName = "id", nullable = false), inverseJoinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id", nullable = false))
public List<Customer> getCustomerList() {
return customerList;
}
public void setCustomerList(List<Customer> customerList) {
this.customerList = customerList;
}
@Entity
public class Customer {
private List<Station> stationList;
private ...
...
@ManyToMany
@JoinTable(name = "customer_station", catalog = "", schema = "examination", joinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id", nullable = false), inverseJoinColumns = @JoinColumn(name = "station_id", referencedColumnName = "id", nullable = false))
public List<Station> getStationList() {
return stationList;
}
当我们获取一个customer时,会出现stackOverFlow错误
customerRepository.findOne(1)
这是因为在查询customer时会查询与其关联的所有station,查询与其关联的所有station时又会查询与这个station关联的所有customer,无尽的查询就这样开始了。
使用@JsonIgnoreProperties可以解决这一问题
@Entity
public class Station {
private List<Customer> customerList;
private ...
...
@ManyToMany
@JsonIgnoreProperties(value = { "stationList" })// 解决循环查找的问题
@JoinTable(name = "customer_station", catalog = "", schema = "examination", joinColumns = @JoinColumn(name = "station_id", referencedColumnName = "id", nullable = false), inverseJoinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id", nullable = false))
public List<Customer> getCustomerList() {
return customerList;
}
public void setCustomerList(List<Customer> customerList) {
this.customerList = customerList;
}
@Entity
public class Customer {
private List<Station> stationList;
private ...
...
@ManyToMany
@JsonIgnoreProperties(value = "customerList")
@JoinTable(name = "customer_station", catalog = "", schema = "examination", joinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id", nullable = false), inverseJoinColumns = @JoinColumn(name = "station_id", referencedColumnName = "id", nullable = false))
public List<Station> getStationList() {
return stationList;
}