【问题标题】:Infinity loop when using findAll() Spring JPA PostgreSQL使用 findAll() Spring JPA PostgreSQL 时的无限循环
【发布时间】:2016-03-13 11:27:14
【问题描述】:

这是我的实体:

@Entity
@Table(name = "remind")

public class Remind {

@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private long id;

@Column(name = "title", nullable = false, length = 50)
private String title;

@Column(name = "remind_date", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date remindDate;


public Remind() {
}

public long getId() {
    return id;
}

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

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public Date getRemindDate() {
    return remindDate;
}

public void setRemindDate(Date remindDate) {
    this.remindDate = remindDate;
}

 //---Dependency---->

@OneToOne(optional = false)
@JoinColumn(name="id_user", unique = true, nullable = true, updatable = false)
private Users user;

public void setUser(Users user) {
    this.user = user;
}

public Users getUser() {
    return user;
}



}

这是另一个实体:

@Entity
@Table(name = "users")

public class Users {

@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private long id;

@Column(name = "name", nullable = false, length = 50)
private String name;

public Users() {
}

public long getId() {
    return id;
}

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

public String getName() {
    return name;
}

public void setName(String title) {
    this.name = name;
}



 //---Dependency---->

@OneToOne(optional = false, mappedBy="user")
public Remind remind;

public Remind getRemind() {
    return remind;
}

public void setRemind(Remind remind) {
    this.remind = remind;
}

这是 Idea 向我展示的图表:

但是当我在 RemindController.class 中使用时:

@RequestMapping(value = "/get", method = RequestMethod.GET)
@ResponseBody
public List<Remind> getReminder() {
    List<Remind> list = remindRepository.findAll();
    return list;
}

我有这个结果...无限循环:

我做错了什么?好像图没问题。请帮帮我(

【问题讨论】:

  • 真的是无限循环吗?
  • 观察:使用非便携式“增量”生成器毫无意义。 JPA 提供“GenerationType.INCREMENT”策略,因此可以与所有 JPA 提供者一起使用。
  • 好的,谢谢,我会改的。但这并不能解决我的问题(

标签: java spring hibernate postgresql jpa


【解决方案1】:

这不是 jpa 的问题。将您的实体序列化为 json 是一个问题。您需要将关系显式标记为双向,以便序列化程序可以跳过一端。

对于 Spring,我假设您使用的是 jackson。

查看this 问题的答案。

【讨论】:

  • @TomWally 很高兴它有所帮助,但请注意,使用 @JsonIgnore 会导致您的字段始终被忽略。这不是你想要的,看看@JsonManagedReference@JsonBackReference@JsonIdentity
猜你喜欢
  • 2021-08-25
  • 2018-08-02
  • 1970-01-01
  • 2016-01-18
  • 2018-11-25
  • 2016-08-18
  • 1970-01-01
  • 2017-01-09
  • 2020-01-31
相关资源
最近更新 更多