问题描述
我正在使用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 (将#修改为@)