我有一张代表多对多关系的表。
+----------+ +------------+ +----------+
| User | | UserGroups | | Group |
+----------+ +------------+ +----------+
| id (PK)|---(1,N)---| user_id |---(N,1)---| id (PK)|
| year (PK)| | year | | year (PK)|
| name | | group_id | | name |
+----------+ +------------+ +----------+
在Java中,我只有实体User和Group,我不喜欢在Java模型中拥有UserGroups,因为它没有提供关系的更多信息。我的班级用户是这样的:
@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。 我不想在UserGroups表中创建另一个年份列。 我如何在Java中实现这种关系?
答案 0 :(得分:0)
我根本不是这个主题的专家。但我确实知道以下内容:
联接表只能通过其ID来关联/连接User
和Group
个实体,因为它们是unique
。在您添加字段year
int等式时,您忽略该要求。
结论:您必须从联接表中删除年份。
选项:使其成为唯一的&#34; user_id&amp;一年&#34;对于用户表和&#34; group_id&amp;一年&#34;对于Group表可能有效。我对此表示怀疑。