java - 使用@JoinTable 的休眠一对多映射问题
问题描述
我有两个表:用户和团队
用户
- 用户身份
- 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。
解决方案
您有一个包含两个字段的组合键:
@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;
推荐阅读
- angular - Angular file upload include file with other data in same post
- c++ - How to use Eigen::Tensor::convolve with multiple kernels?
- apache-kafka - KSQL UDF: DataException: Struct schemas do not match
- javascript - AutoFocus next TextInput onChangeText Crash
- java - 如何从 ArrayList 的 ArrayList 中删除重复的 ArrayList
- python-3.x - 如何在 python 3.7 上给出使用 networkx 制作的网络的哈希或签名?
- iframe - Refused to display 'https:/dmain.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'
- swift - 使用 Cocoa (macOS) 从 NSGradient 获取 NSImage
- matlab - 如何找到 parfor 的最佳工人数量?
- html - *ngIf 取决于另一个 div 的可见性 - Angular