我有一组表,除了它们的所有者表之外都是相同的,以及该表的相应外键。由于Hibernate / JPA,我使它全部通用,但无法通过@JoinColumn
传递@AssociationOverride
信息,因为它的name
值被忽略,或者根本没有被覆盖。
例如;
@Data
@Entity
@Table(name = "etc")
@AssociationOverride(name = "parent", joinColumns = @JoinColumn(name = "id"))
public class RealEntity extends BaseEntity<ParentEntity, String> {
}
用;
@Data
@MappedSuperClass
public class BaseEntity<K, P> implements Serializable {
@EmbeddedId
protected Key<K> key = new Key<>();
@MapsId("fk")
@ManyToOne
@JsonBackReference
protected P parent;
@Data
@Embeddable
public static class Key<K> implements Serializable {
protected K fk;
@Column(name = "sub_id")
protected String subId;
}
}
父:
@Data
@Entity
@Table(name = "parentc")
public class ParentEntity implements Serializable {
@Column(name = "id")
protected String parentId;
}
如你所见,除了父的fk引用定义之外它运行良好,我得到了映射错误,因为Hibernate试图找到parent_id
,而不仅仅是id
的foreignKey ,因为@JoinColumn
覆盖被忽略。如果我将父信息直接放在RealEntity
中(显然),或者我将@JoinColumn(name = "id")
放在parent
BaseEntity
中,但是我希望将其保留为可能。这个问题有什么解决方案吗?或者我应该放弃?
编辑 :当我为@JoinColumn
parent
中的BaseEntity
加入一个具有可接受映射的正确@MapsId
时,似乎被覆盖,所以它需要一些有效的覆盖。我不能只是从虚无中添加一个关联就是这种情况?我在网上看到过很多关于他们从头开始建立关联的例子,我对{{1}}的使用可能会打破我的猜测。但我不能改变我当前的结构,因为有必要能够为依赖的子表表示复合外键定义......我觉得有一个非常简单的解决方案,或者一些hacky方式来实现我想要的,我似乎无法找到它!