【发布时间】:2019-02-01 14:49:46
【问题描述】:
基本上我有一个与这个问题类似的问题: jpa how to create new entity with same id as parent entity (JOINED Inheritance)
但由于这个问题已有 9 年历史,我希望今天能找到解决这个问题的方法。
这是我的问题: 我正在使用带有继承类型的实体继承。
实体是: 1人 2.医生(延伸人) 3. 教授(延伸人)
这是我的实际问题:
当我创建 Doctor 时,数据填充在表 Doctor 和 Person 中,id 相同,假设 id = 1 ==> 到目前为止一切都很好
当我创建教授时,数据填充在具有相同 id 的教授和人员表中,假设 id = 2 ==>到目前为止一切都很好
当现有的医生 (id=1) 现在也成为教授(反之亦然)时,我希望人和医生保持相同的 id,并且只需在教授表中添加条目,也id=1。
以下是我如何让医生兼教授的一些代码:
public void makeDocAlsoProf(id){
// Find existing Person
List<Person> persons = personRepo.findById(id);
Person foundPerson = !persons.isEmpty() ? persons.iterator().next() : null;
prof = new Professor(foundPerson); //This copies all parent Person fields
prof.setId(foundPerson.getId()); // Set the same id (id = 1)
prof = professorRepo.save(prof); // This gives Prof a new id (id = 3)
}
所以在执行该方法之前,这是我在数据库中拥有的行:
人:
- id 1
- id 2
医生:
- id 1
教授:
- id 2
这是我想要实现的目标:
人:
- id 1
- id 2
医生:
- id 1
教授:
- id 1
- id 2
这是我得到的:
人:
- id 1
- id 2
- id 3(与 1 相同的值)
医生:
- id 1
教授:
- id 2
- ID 3
我将不胜感激,即使这不可能,也可能是关于如何使用不同的实体模型方法或其他方法解决此问题的提示。
提前谢谢各位!
【问题讨论】:
-
可以放你的型号代码吗?
-
所以基本上你的映射是:一个人也可以是医生和教授。您可以发布模型源代码吗?
标签: java spring jpa inheritance