Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接收错误“;外键的列数必须与引用的主键的列数相同;尽管没有使用复合键_Java_Spring_Hibernate_Spring Data Jpa_Javax.persistence - Fatal编程技术网

Java 接收错误“;外键的列数必须与引用的主键的列数相同;尽管没有使用复合键

Java 接收错误“;外键的列数必须与引用的主键的列数相同;尽管没有使用复合键,java,spring,hibernate,spring-data-jpa,javax.persistence,Java,Spring,Hibernate,Spring Data Jpa,Javax.persistence,使用以下类运行项目失败: org.hibernate.MappingException:外键 (FK9ex9b0501jh788ukls6wuglix:a_bc[bc_id])必须具有相同数量的 列作为引用的主键(bc[b_id,c_id]) @实体 公共A类{ @身份证 私人长id; @许多 @JoinTable(name=“A_BC”, joinColumns=@JoinColumn(name=“A_ID”), inverseJoinColumns=@JoinColumn(name=“BC_

使用以下类运行项目失败:

org.hibernate.MappingException:外键 (FK9ex9b0501jh788ukls6wuglix:a_bc[bc_id])必须具有相同数量的 列作为引用的主键(bc[b_id,c_id])

@实体
公共A类{
@身份证
私人长id;
@许多
@JoinTable(name=“A_BC”,
joinColumns=@JoinColumn(name=“A_ID”),
inverseJoinColumns=@JoinColumn(name=“BC_ID”))
私有集;
}
@实体
公共B级{
@身份证
私人长id;
@许多
@JoinTable(name=“BC”,
joinColumns=@JoinColumn(name=“B_ID”),
inverseJoinColumns=@JoinColumn(name=“C_ID”))
私有集;
}
@实体
公共C类{
@身份证
私人长id;
@许多
@JoinTable(name=“BC”,
joinColumns=@JoinColumn(name=“C_ID”),
inverseJoinColumns=@JoinColumn(name=“B_ID”))
私有集;
}
@实体
公共类BC{
@身份证
私人长id;
@许多酮
@JoinColumn(name=“B_ID”)
私人B,;
@许多酮
@JoinColumn(name=“C_ID”)
私人C C;
@许多
@JoinTable(name=“A_BC”,
joinColumns=@JoinColumn(name=“BC_ID”),
inverseJoinColumns=@JoinColumn(name=“A_ID”))
私有集;
}
@实体
公共甲级学校{
@身份证
私人长id;
@许多酮
@JoinColumn(name=“A_ID”)
私人A;
@许多酮
@JoinColumn(name=“BC_ID”)
私人不列颠哥伦比亚省;
}
实体B、C和BC按预期工作。B和C使用BC作为联接表相互连接


引入实体A并将其与BC关联时会出现问题。BC充当连接表,但它也是另一个连接表(a_BC)的一部分,我认为这就是导致错误的原因,但我不明白为什么或如何解决它。

问题是你一边有一个@OneToMany,另一边有@manytomy。

问题是你一边有一个@OneToMany,另一边有@manytomy。

我没有任何@OneToMany'关系,只有@manytomone'和@manytomy,没有循环引用。两个类中都应该使用多对多。。。。单面多对一引用造成了这个问题…你能用对实体的任何必要更改来更新你的答案吗?我没有任何“@OneToMany”关系,只有“@manytone”和“@ManyToMany”,没有循环引用。你应该在这两个类中使用多对多。。。。一方多对一的引用造成了这个问题……您能用对实体的任何必要更改来更新您的答案吗?
@Entity
public class A {
    @Id
    private Long id;

    @ManyToMany
    @JoinTable(name = "A_BC",
    joinColumns = @JoinColumn(name = "A_ID"),
    inverseJoinColumns = @JoinColumn(name = "BC_ID"))
    private Set<BC> set;
}

@Entity
public class B {
    @Id
    private Long id;

    @ManyToMany
    @JoinTable(name = "BC",
    joinColumns = @JoinColumn(name = "B_ID"),
    inverseJoinColumns = @JoinColumn(name = "C_ID"))
    private Set<C> set;
}

@Entity
public class C {
    @Id
    private Long id;

    @ManyToMany
    @JoinTable(name = "BC",
    joinColumns = @JoinColumn(name = "C_ID"),
    inverseJoinColumns = @JoinColumn(name = "B_ID"))
    private Set<B> set;
}

@Entity
public class BC {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "B_ID")
    private B b;

    @ManyToOne
    @JoinColumn(name = "C_ID")
    private C c;

    @ManyToMany
    @JoinTable(name = "A_BC",
    joinColumns = @JoinColumn(name = "BC_ID"),
    inverseJoinColumns = @JoinColumn(name = "A_ID"))
    private Set<A> set;
}

@Entity
public class A_BC {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "A_ID")
    private A a;

    @ManyToOne
    @JoinColumn(name = "BC_ID")
    private BC bc;
}