【发布时间】:2020-08-21 01:21:39
【问题描述】:
使用 Spring Boot JPA,我正在使用属性 id、name 和 parent_id 对“Person”表进行自联接。 parent_id 是引用 Person.id 的外键。因此,一个 Person 将有零个或一个父级。下面是我的域类的示例。
@Entity(name="person")
public class Person {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
@Column(name="name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="parent_person_id")
private Person parent;
// constructors, getters, setters, etc
}
这实际上工作得很好;例如,当我使用 CrudRepository.findById() 查询时,我得到一个带有嵌入 Person 对象(父对象)的 Person 对象,该对象可能有另一个嵌入的 Person 对象(祖父对象)等,直到我得到一个没有父对象的 Person。
我的问题是,我怎样才能只检索一个 Person 及其直系父母而不进一步递归(没有祖父母、曾祖父母等)?
我想我可以简单地避免加入,并让 parent_id 成为一个普通的@Column,然后在服务层做一个额外的查询来找到父级,但我想知道是否有一些 Jpa 魔法可以让它更容易比那个。
【问题讨论】:
-
你的意思是在 JSON 结果中有无限循环吗?
-
不,它工作得很好——但我只想递归一层。只是父级,没有更多。
-
我明白,但你是如何返回对象的?这是休息api吗?或者您在
System.out.println()中遇到了toString()的问题。 -
有没有试过在join栏里加
referencedColumnName? -
当你打电话给 parent 时究竟发生了什么?如果您在序列化过程中遇到问题,
parent上的@JsonIgnoreProperties({ "parent" })字段应该可以工作
标签: spring-boot spring-data-jpa