gpt4 book ai didi

java - Spring JPA、MySQL-无法写入内容 : Infinite recursion StackOverflowError through reference chain

转载 作者:行者123 更新时间:2023-11-30 06:10:18 25 4
gpt4 key购买 nike

我想知道我是否在这里做错了什么,因为我已经以非递归的方式完成了加载类型。但是我收到以下错误。当我尝试从访问对象访问 getServerRequest() 方法时。

WARN 6511 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->com.biscoind.domain.Visit["request"]->com.biscoind.domain.ServerRequest["visits"]->org.hibernate.collection.internal.PersistentBag[0]->

我有以下映射类,

@Entity
@Table(name = "server_request")
public class ServerRequest {

private Long id;
private Date createdDate;
private Date lastUpdatedDate;

private List<Visit> visits = new ArrayList<Visit>();

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "server_request_id")
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "request", cascade = CascadeType.ALL)
public List<Visit> getVisits() {
return visits;
}

public void setVisits(List<Visit> visits) {
this.visits = visits;
}

public Date getCreatedDate() {
return createdDate;
}

public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

public Date getLastUpdatedDate() {
return lastUpdatedDate;
}

public void setLastUpdatedDate(Date lastUpdatedDate) {
this.lastUpdatedDate = lastUpdatedDate;
}
}

和,

@Entity
@Table(name = "user_visit")
public class Visit implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;
private ServerRequest request;
private String status;
private Date date;

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_visit_id")
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "server_request_id", referencedColumnName = "server_request_id", nullable = false)
public ServerRequest getRequest() {
return request;
}

public void setRequest(ServerRequest request) {
this.request = request;
}

}

最佳答案

如果您使用的是 Jackson,并且您的转换器尝试写入的是 JSON(堆栈并没有说明这一点),请将 @JsonIdentityInfo 注释放在您的 getRequest() 上 方法。

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id", scope=ServerRequest.class)
@ManyToOne(fetch = FetchType.EAAGER)
@JoinColumn(name = "server_request_id", referencedColumnName = "server_request_id", nullable = false)
public ServerRequest getRequest() {
return request;
}

这是 Jackson 在序列化/反序列化过程中解决对象图中循环依赖的方法。


一些提示:

  • 您不必声明 FetchType.LAZY。这是默认完成的。
  • 在您的 ManyToOne 上,将 FetchType.EAAGER 更改为 FetchType.EAGER

关于java - Spring JPA、MySQL-无法写入内容 : Infinite recursion StackOverflowError through reference chain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com