Java 是否可以使用Spring jpa在联合继承中创建2个子项?

Java 是否可以使用Spring jpa在联合继承中创建2个子项?,java,spring,jpa,spring-data-jpa,spring-data,Java,Spring,Jpa,Spring Data Jpa,Spring Data,我正在尝试创建几个与同一个父对象链接的子对象 @Entity @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "USER") public class User implements Serializable { @Id @Column(name = "ID_USER") @GeneratedValue(strategy = GenerationType.

我正在尝试创建几个与同一个父对象链接的子对象

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "USER")
public class User implements Serializable {

    @Id
    @Column(name = "ID_USER")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idUser;

    @Column
    private String email;


@Entity
@Table(name = "PRODUCT_OWNER")
@PrimaryKeyJoinColumn(name = "ID_PRODUCT_OWNER")
public class ProductOwner extends User{

}


@Entity
@Table(name = "SCRUM_MASTER")
@PrimaryKeyJoinColumn(name = "ID_SCRUM_MASTER")
public class ScrumMaster extends User{

    
}

@Entity
@PrimaryKeyJoinColumn(name = "ID_DEVELOPER")
@Table(name = "DEVELOPER")
public class Developer extends User{
            
}
如何创建具有相同用户ID的开发人员和ScrumMaster

dev = new Developer();
devRegistro.setIdMiembro(new Long("1"));
devRegistro.setEmail("user@email.com");

po = new ProducOwner();
po.setIdMiembro(new Long("1"));
po.setEmail("user@email.com");

developerService.saveOrUpdate(dev);
productOwnerService.saveOrUpdate(po);
它失败,因为在第二个事务中已经存在ID为1的用户


我在互联网上看到的所有例子都不可能是两个孩子的一部分,比如动物(猫或狗)、车辆(汽车或摩托车)。

对你的问题的简短回答是:在你当前的类层次结构中,不可能保存两种类型的孩子,这就是为什么你会得到例外

因此,通过类层次结构阅读您的代码,以下是您传递的信息:

  • ProductOwner是一个用户
  • ScrumMaster是一个用户
  • 开发者是用户

然后,考虑到加入继承策略在JPA中有一个表,每个类只有子类的列、相同的主键(有时还有鉴别器列和值)。这意味着每个saveOrUpdate将在实体类型的类层次结构中的每个表中创建一条记录,每个表都具有相同的主键。所以

developerService.saveOrUpdate(dev)将触发用户表中的插入和开发人员表中的插入。然后是
productOwnerService.saveOrUpdate(po)试图使用已经存在的主键在用户表中进行插入,因此违反了DB的唯一性约束,并导致JPA异常


这看起来有点像。。。也许重新设计您的类以支持组合而不是继承:用户有developeratAttribute,用户有ProductownerAttribute,用户有ScrumMasterAttribute,显然,您不能。如果您调用了
em.find(User.class,1L)
,您希望得到什么?