外键必须与引用的主键具有相同的列数

时间:2014-07-14 08:57:39

标签: hibernate jpa spring-data

我知道这个主题已在很多时候讨论过,但我仍然坚持异常: 外键必须与引用的主键具有相同的列数。

(我正在使用spring数据和休眠)

我的ID类:

    @Embeddable
public class ProxyDienstRelationPK implements Serializable{

    private static final long serialVersionUID = 1L;

    @Column
    private String parentDienstId;
    @Column
    private String subDienstId;


    public ProxyDienstRelationPK(){}

    public ProxyDienstRelationPK(ProxyDienst parentDienst, ProxyDienst subDienst){
        this.parentDienstId = parentDienst.getId();
        this.subDienstId = subDienst.getId();
    }

   //Getter and Setter , HashCode and Equals

}

我的实体:

    @Entity
public class ProxyDienstRelation {

    @EmbeddedId
    private ProxyDienstRelationPK pdId;

    private ProxyDienst subDienst;

    private ProxyDienst parentDienst;


    private boolean modul;

    //Getter and Setter   
}

我为此构造获得以下异常:

  

引起:org.hibernate.MappingException:外键(FK_ad3h9gu4labg6ix34bei3poxt:proxy_dienst_relation [parent_dienst_id,sub_dienst_id]))必须与引用的主键具有相同的列数(proxy_dienst [id])       在org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:110)       在org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:93)       在org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1816)       在org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1739)       在org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424)       在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)       在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:850)       ......还有23个

希望有人可以提供帮助。感谢

1 个答案:

答案 0 :(得分:4)

@MapsId("subDienstId")
@ManyToOne
private ProxyDienst subDienst;

@MapsId("parentDienstId")
@ManyToOne
private ProxyDienst parentDienst;

在你的情况下,parentDienstId是PK的一部分,但也扮演着FK的角色。这被称为“派生身份”。在Pro JPA 2书中有一个很好的章节。