我有一个遗留数据库设计,其中表A,B,C具有id作为主键,并且它们都与表D具有一对多关系。表D具有linkable_type和linkable_id作为这些表的连接标准,即A,B,下进行。
其中D.linkable_type =' A'和D.linkable_id = A.id
同样对于其他表也加入为 D.linkable_type =' B'和D.linkable_id = B.id D.linkable_type =' C'和D.linkable_id = C.id
我试过了
@ManyToOne
@JoinColumn(name="LINKABLE_ID", referencedColumnName="ID")
@WhereJoinTable(clause = " LINKABLE_TYPE = 'A' ")
private A a;
//bi-directional many-to-one association to TrainRoute
@ManyToOne
@JoinColumn(name="LINKABLE_ID", referencedColumnName="ID")
@WhereJoinTable(clause = " LINKABLE_TYPE = 'B' ")
private B b;
但由于同一列上的多个连接,它无法正常工作。 我也试过
@ManyToOne
@Any(metaColumn = @Column(name = "LINKABLE_TYPE"))
@AnyMetaDef(idType = "long", metaType = "string",
metaValues = {
@MetaValue(targetEntity = A.class, value = "A"),
@MetaValue(targetEntity = B.class, value = "B"),
@MetaValue(targetEntity = C.class, value = "C")
})
@Cascade( { org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name = "LINKABLE_ID", referencedColumnName = "ID")
@JsonProperty("linkable_id")
private E e;
我创建了
public interface E {}
并在子类A,B,C中实现,但是这并不允许在类A中包含反向关系的@oneToMany,其中Class可以包含D的列表。它没有找到任何内容并且失败
@OneToMany
private List<D> d;
任何人都可以帮助我如何使用Hibernate在Spring JPA中映射这些关系?
答案 0 :(得分:0)
我们通过以下方法解决了这个问题: 我们将@OneToMany对象设置为@Transient,并在保存父对象之后手动保存该对象。这样,我们就拥有了可用于映射的两个键。
在获取部分,我们可以在两列上使用JPQL。