自引用层次结构实体的ManyToOne映射期间DuplicateMappingException

问题描述

我正在使用JPA进行Spring Boot项目。我有一个表,其实体是分层的并且具有自引用功能。我想映射该实体,以便生成的对象具有其父项和子项的数据。

假设我的实体是Person。为了防止在对象内部形成递归链(父母,父母内部的祖父母,祖父母内部的祖父母...或子代之间的相似),我提供了另一个名为SummaryPerson实体类,该实体类映射同一张表,仅用于保存一些没有父母或子女信息的元数据。

实体类和表结构如下。

通过使用此解决方案并在下面提供了类定义,我已经成功映射了子列表。在不映射父级并将其保持为parentId(仅长整数)的情况下,该应用程序可以正常运行。但是,在映射父代和子代时,在启动过程中会遇到以下错误

org.hibernate.DuplicateMappingException: Table [person] contains physical column name [sponsor_id] referred to by multiple logical column names: [parent_id],[parentId]

我不明白为什么会收到此错误,也不知道如何解决。希望有人能帮助我。

  • id-int(11)PK
  • parent_id-int(11)(同一表的外键)
  • 名称-varchar(50)
  • 姓氏-varchar(50)
  • 电子邮件-varchar(50)
  • 电话-varchar(50)
  • 插入日期-日期时间
  • other_field_1
  • other_field_2
  • ...
@Entity
@Table(name="person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String surname;
    private String email;
    private String phone;

    @CreationTimestamp
    private Date insertDate;

    // private Long parentId;
    @ManyToOne
    private SummaryPerson parent;

    @OnetoMany(mappedBy = "parentId")
    private List<SummaryPerson> children;

    // other fields,fields for other details

    // getters & setters
}
@Entity
@Table(name="person")
public class SummaryPerson {
    @Id
    private Long id;
    private String name;
    private String surname;
    private Long parentId;

    // that's it,no other fields

    // getters & setters
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)