Java 我使用多通,一通,在获取数据时有无止境的循环
我在hibernate中使用manyTone和OneToMany。我想创建一个有位置的用户。 当我在postman中获取数据时,我有一个无休止的循环,因为当我获取用户时,它显示用户的位置,在位置中显示用户,等等。以下是代码: 地点类别:Java 我使用多通,一通,在获取数据时有无止境的循环,java,json,hibernate,Java,Json,Hibernate,我在hibernate中使用manyTone和OneToMany。我想创建一个有位置的用户。 当我在postman中获取数据时,我有一个无休止的循环,因为当我获取用户时,它显示用户的位置,在位置中显示用户,等等。以下是代码: 地点类别: @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL) @JoinColumn(name=FLD_LOC, nullable=false) private Consumer co
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name=FLD_LOC, nullable=false)
private Consumer consumers;
public Consumption(String location, float consumpiton,Consumer consumer) {
this.location = location;
this.consumpiton = consumpiton;
this.consumers=consumer;
}
用户类别:
@OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
private List<Consumption> locations ;
public Consumer(String clientId, String name,String location, float pwConsumption, String email, String password, String roles) {
super(clientId, name, email, password, roles);
this.locations=new ArrayList<>();
this.location=location;
this.pwcons=pwConsumption;
}
如何让它在JSON位置中仅显示位置或id的部分名称?问题 当您必须使用双向关系序列化对象时,这是一个常见问题 解决方案 当面对双向关系时,向序列化程序发出停止位置的信号
locationDto
s填充customerDto
的location
字段,但将locationDto的customer
字段设置为空
@JsonManagedReference
和@JsonBackReference
告诉Jackson库不要递归地序列化它
- 替换
在生产系统中,我们不公开域对象的所有字段,因为它可以有许多不应该对外公开的内部字段。这就是原因,第一种方法是首选的添加
@JsonIgnore
而不是私人列表位置
@Andronicus谢谢你的评论,我使用了下面的答案
"id": 2,
"version": 1,
"updated": "2020-06-28T15:41:49.082",
"clientId": "admin",
"name": "admin",
"email": "admin123@gmail.com",
"password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
"active": true,
"roles": "ROLE_ADMIN",
"locations": [
{
"locationsid": 1,
"location": "Pecs",
"consumpiton": 0.0,
"consumers": {
"id": 2,
"version": 1,
"updated": "2020-06-28T15:41:49.082",
"clientId": "admin",
"name": "admin",
"email": "admin123@gmail.com",
"password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
"active": true,
"roles": "ROLE_ADMIN",
"locations": [
{
"locationsid": 1,
"location": "Pecs",
"consumpiton": 0.0,
"consumers": {
"id": 2,
"version": 1,
"updated": "2020-06-28T15:41:49.082",
"clientId": "admin",
"name": "admin",
"email": "admin123@gmail.com",
"password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
"active": true,
"roles": "ROLE_ADMIN",
"locations": [
{
"locationsid": 1,
"location": "Pecs",
@OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
private List<Consumption> locations ;
with
@OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
@JsonManagedReference
private List<Consumption> locations ;
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name=FLD_LOC, nullable=false)
private Consumer consumers;
with
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name=FLD_LOC, nullable=false)
@JsonBackReference
private Consumer consumers;