Java 接收错误“;外键的列数必须与引用的主键的列数相同;尽管没有使用复合键
使用以下类运行项目失败: org.hibernate.MappingException:外键 (FK9ex9b0501jh788ukls6wuglix:a_bc[bc_id])必须具有相同数量的 列作为引用的主键(bc[b_id,c_id])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_
@实体
公共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;
}