我有一个实体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实现这种关系?
答案 0 :(得分:0)
由于X1和X2是“不相关的类型”,因此无法在单个映射中合并它们。您需要在Y中有两个不同的@ManyToOne
映射:
@Entity
class Y {
@Id
String uuid_;
@ManyToOne
X1 owner1_;
@ManyToOne
X2 owner2_;
}
当然,您需要在mappedBy
映射中相应地调整@OneToMany
属性的值。