当前位置: 首页 > 知识库问答 >
问题:

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

支劲
2023-03-14

我知道这个主题在这里讨论了很多次,但我仍然坚持一个例外:外键必须与引用的主键具有相同的列数。

(我正在使用spring数据和hibernate)

我的身份证类别:

    @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_关系[parent_dienst_id,sub_dienst_id])必须与org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:110)org.hibernate.mapping.ForeignKey.alignColumns中引用的主键(proxy_dienst[id])的列数相同(ForeignKey.java:93)位于org.hibernate.cfg.Configuration.secondpasscompileforeignkey(Configuration.java:1816)位于org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1739)位于org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424)位于org.hibernate.cfg.cfg.Configuration.buildSessionFactory(Configuration.java:1844)位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)…23更多信息

希望有人能帮忙。谢谢

共有1个答案

太叔马鲁
2023-03-14
@MapsId("subDienstId")
@ManyToOne
private ProxyDienst subDienst;

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

在您的案例中,parentDienstId是PK的一部分,但也扮演FK的角色。这被称为“派生身份”。在专业JPA2的书中有一个很好的章节。

 类似资料:
  • 我有一个实体,叫做FatRabbitCarrot: 而且很管用。现在上面的类已经替换了字段名,但是结构和我们的存储库是一样的。 然后我尝试添加一个新实体,该实体在上面的类中有一个外键。让我们把这门课叫做NutToffee。FatRabbitCarrot与这个新实体有一对一的关系,而实体本身应该有一对一的关系: 对我来说,这似乎是一个有效的类。但看起来不像。我们正在使用Java8、Hibernate

  • 我有域类 - 用户、角色、组、组角色 用户域 用户.hbm.xml 我有user_grouprole表作为一个连接表为一个用户和一组分组程序我有user_role表作为一个连接表为一个用户和一组角色 组域 Group.hbm.xml 组角色 GroupRole.hbm.xml 当我尝试使用主类进行测试时,我得到了一个映射错误,比如Hibernate映射错误,比如外键(FK5110401A83989

  • 问题内容: 目标:我想在ImportJob中使用importJobId作为分配表ID的外键,这样,当我们那时具有importJobId时,那么我们只能在ID中分配ID,因为没有Job时就无法进行任何分配。 ImportJob表的复合主键为[ORGID,IMPORTJOBTYPE],正在尝试使用以下方式在hibernate状态下创建外键关系: 在Allocation.hbm.xml中无法解决,并收到

  • 嗨,下面是我的实体,它们之间有许多联系 大学生JAVA 学生详细信息。JAVA appmain.java 下面是我的2表中的列 “学生详细信息”中的“值”应输入学生表的“用户角色” 但当我执行appmain时,我的错误率就降低了 我试图解决这个问题,但它显示出同样的错误请建议我如何解决这个问题

  • 问题内容: 目标:我想在ImportJob中使用importJobId作为分配表ID的外键,这样,当我们那时具有importJobId时,那么我们只能在ID中分配ID,因为没有Job时就无法进行任何分配。 ImportJob表的复合主键为[ORGID,IMPORTJOBTYPE],正在尝试使用以下方式在休眠状态下创建外键关系: 在Allocation.hbm.xml中无法解决,并收到以下错误消息:

  • 我在实体和之间有多对多的关系,我使用了一个名为的关联表。 AbstractEntity.java: FunctionEntity.java: FunctionProduceResultEntity.java: ResultEntity.java 功能实用性: 启动服务器时,出现以下错误: 还有类似的问题,例如外键必须具有与多对一映射中引用的主键相同的列数,以及Hibernate MappingEx