Java JPA-映射具有相同实体的列

Java JPA-映射具有相同实体的列,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,在JPA实体中,我希望映射具有相同实体类型的列。查看以下实体 @Entity @Table(name = "Score") public class Score { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false, updatable = false) private Long id; @Column(name =

在JPA实体中,我希望映射具有相同实体类型的列。查看以下实体

@Entity
@Table(name = "Score")
public class Score {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    private Long id;

    @Column(name = "question")
    private String question;

    @Column(name = "score_count")
    private String scoreCount;

    @Column(name = "comment")
    private String comment;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Score parent;

    //Getter setter goes here
}
我添加了
范围
实体的父关系

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Score parent;
如果我这样做,Java不会抛出任何异常。但我想知道,从设计的角度来看,这样做有什么问题吗?这是坏习惯还是好习惯?如果为同一行设置了parent,即parent表示同一行,那么它会是一个循环吗

我现在正在设计一些实体,所以很高兴知道这样做或不这样做的原因。谢谢


注意:我使用spring数据jpa、hibernate和mysql作为数据库

没问题。这种类型的自引用关系非常常见,尤其是在处理分层数据时

在面向对象的思维模式中,我们希望处理抽象而不是细节,因为它很容易理解。因此,如果正确地应用此模式,它甚至是一个很好的寄生虫,前提是父实体和子实体实际上是同一个抽象,在本质上有一些共同的行为。将父对象和子对象建模为同一类型允许我们在编写逻辑时将它们视为相同的抽象

如果为同一行设置了父项,即父项表示同一行,则 这会是一个循环吗


对。它将形成一个循环。这就是为什么在为子对象设置父对象时,您应该检查父节点本身不能是子节点,这应该被视为应该在代码中强制执行的业务要求之一。

每个关联都应该有一个端点,这意味着父节点不能是自己的父节点。如果节点没有父节点,则需要将其父节点设置为null,否则,您将遇到您提到的问题。请参阅
https://stackoverflow.com/a/3393662/3479154