为了账号安全,请及时绑定邮箱和手机立即绑定

使用@JoinTable 的休眠一对多映射问题

使用@JoinTable 的休眠一对多映射问题

杨__羊羊 2022-06-30 11:43:27
我有两个表:用户和团队用户用户身份4位密码/密码团队Team_id队名约束 1 个用户只能属于一个团队,而 1 个团队可以有多个用户。我已经对数据库进行了规范化,名为 user_team 的第三个 table()Join Table) 将如下所示:User_Team[加入表]User_id(这是来自用户表的外键)Team_Id(这是来自团队表的外键)在使用 @JoinColumn 属性和 @OneToMany 注释在 Hibernate 中实现这一点时,它会抛出以下错误:来自 com.project.hibernate.User 的外键引用 com.project.hibernate.Team 的列数错误。应该是 2线程“主”org.hibernate.AnnotationException 中的异常:从 com.project.hibernate.User 引用 com.project.hibernate.Team 的外键具有错误的列数。在 org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1610) 在 org.hibernate.cfg.annotations 的 org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:657) 应该是 2。 CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1335) at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:800) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:725) org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) 在 org.hibernate.boot.internal.InFlightMetadataCollectorImpl。
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

您有一个包含两个字段的组合键:


@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;


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号