gpt4 book ai didi

java - 多对多关系中 @JoinTable 和共享 key 的异常

转载 作者:行者123 更新时间:2023-12-02 12:18:27 27 4
gpt4 key购买 nike

我有一个代表多对多关系的表。

+----------+           +------------+           +----------+
| User | | UserGroups | | Group |
+----------+ +------------+ +----------+
| id (PK)|---(1,N)---| user_id |---(N,1)---| id (PK)|
| year (PK)| | year | | year (PK)|
| name | | group_id | | name |
+----------+ +------------+ +----------+

在Java中,我只有实体用户和组,并且我不喜欢Java模型中的用户组,因为它没有提供关系的更多信息。我的类(class)用户是这样的:

@Entity
@Table(name="User")
public class User {
@EmbeddedId
private UserPK id;
@ManyToMany
@JoinTable(name = "UserGroups",
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName="id"),
@JoinColumn(name = "year", referencedColumnName="year") },
inverseJoinColumns = { @JoinColumn(name = "group_id", referencedColumnName = "id"),
@JoinColumn(name = "year", referencedColumnName = "year") })
private List<Group> groups;
}

当我尝试运行应用程序时,出现此异常:

org.hibernate.MappingException:Repeated column in mapping for collection: com.testapp.model.entities.User.groups column: year

我不想在我的 Java 模型中包含用户组。我不想在 UserGroups 表中创建另一个年份列。如何在 Java 中建立这种关系?

最佳答案

我根本不是这个主题的专家。但我确实知道以下几点:

连接表可以通过 ID 关联/连接用户实体,只是因为它们是唯一。当您在方程中添加字段year时,您忽略该要求。

结论:您必须从连接表中删除年份。

选项:将用户表的“user_id &year”和组表的“group_id &year”设为唯一可能会起作用。但我对此表示怀疑。

关于java - 多对多关系中 @JoinTable 和共享 key 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com