我有两个表:用户和团队
用户
团队
约束 1个用户只能属于一个团队,而1个团队可以有多个用户。 我已经规范化了数据库,名为user_team的第三个table()联接表将如下所示:
User_Team [JOIN TABLE]
在Hibernate中使用@JoinColumn属性和@OneToMany注释实现此操作时,会引发以下错误:
一个外键,引用来自com.project.hibernate.Team com.project.hibernate.User的列数错误。应该是2
线程“ main” org.hibernate.AnnotationException中的异常:A 引用com.project.hibernate.Team的外键 com.project.hibernate.User的列数错误。应该是2 在 org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:657) 在 org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1610) 在 org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1335) 在 org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:800) 在 org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:725) 在 org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) 在 org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621) 在 org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1589) 在 org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) 在 org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83) 在 org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418) 在 org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 在com.project.hibernate.User_TeamDAO.main(User_TeamDAO.java:26)
答案 0 :(得分:1)
您有一个包含两个字段的组合键:
@Id
@Column(name="team_id")
private String team_id;
@Id
@Column(name="team_name")
private String team_name;
您的联接表每个表只有一个键:
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="user_team",
joinColumns=@JoinColumn(name="team_id"),
inverseJoinColumns=@JoinColumn(name="user_id"))
private List<User> user;
您需要使用所有建立关系的键,诸如此类(当然表也需要具有正确的列):
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="user_team",
joinColumns=@JoinColumn({@JoinColumn(name="team_id"), @JoinColumn(name="team_name")}),
inverseJoinColumns=@JoinColumn(name="user_id"))
private List<User> user;