JPA:如何将@OneToMany用于不同的目标类型

时间:2013-11-08 15:40:20

标签: jpa

我有一个实体Y,并希望在多个不相关的实体X1,X2中嵌入一个Y列表......这种关系应该是双向的。可以用@ ManyToOne / @ OneToMany完成吗?我试过了

@Entity
class X1 {
   @Id
   String uuid_;

   @OneToMany(mappedBy="owner_")
   List< Y > yList_;
}

@Entity
class X2 {
   @Id
   String uuid_;

   @OneToMany(mappedBy="owner_")
   List< Y > yList_;
}

@Entity
class Y {
   @Id
   String uuid_;

   @ManyToOne
   String owner_;
}

但这不起作用,因为String不是实体,不能用作关系属性。

我还尝试将“String owner_”替换为“XBase owner_”,使用XBase作为X1和X2的@MappedSuperClass。这产生了同样的错误:“[Y类]使用非实体[类XBase]作为关系属性[field owner _]”中的目标实体。

我想知道是否有可能在关系的“一”端有不同的不相关类型。你会如何与JPA实现这种关系?

1 个答案:

答案 0 :(得分:0)

由于X1和X2是“不相关的类型”,因此无法在单个映射中合并它们。您需要在Y中有两个不同的@ManyToOne映射:

@Entity
class Y {
    @Id
    String uuid_;

    @ManyToOne
    X1 owner1_;

    @ManyToOne
    X2 owner2_;
}

当然,您需要在mappedBy映射中相应地调整@OneToMany属性的值。