我有两个表:用户和团队
用户
球队
约束1用户只能属于一个团队,而1个团队可以拥有多个用户。我已经规范化了数据库,第三个表()Join Table)名为user_team,如下所示:
User_Team [加入表]
在使用@JoinColumn属性和@OneToMany注释在Hibernate中实现它时,它会抛出以下错误:
从com.project.hibernate.User引用com.project.hibernate.Team的外键具有错误的列数。应该是2
线程“main”中的异常org.hibernate.AnnotationException:从com.project.hibernate.User引用com.project.hibernate.Team的外键具有错误的列数。应该是org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:657)中的org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1610)org.hibernate.cfg.annotations中的2。 CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1335)位于org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:800)org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:725)at at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621)atg.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(MetadataBu) ildingProcess.java:83)org.hibernate.cfg上的org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)位于com.project.hibernate.User_TeamDAO.main(User_TeamDAO.java:26)的org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)中的.Configuration.buildSessionFactory(Configuration.java:691)
您有一个包含两个字段的组合键:
@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;