@AssociationOverride不会从头创建@JoinColumn

时间:2017-12-03 07:31:00

标签: java hibernate jpa spring-data-jpa

我有一组表,除了它们的所有者表之外都是相同的,以及该表的相应外键。由于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方式来实现我想要的,我似乎无法找到它!

0 个答案:

没有答案