我有以下情况:
我有一个充满用户的系统。希望为超过一周左右登录该网站的用户举办竞赛。因此,我需要创建一个新的 Contest 对象,其中包含参赛作品和获胜者。
我创造了这样的东西:
private Set<User>;
@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
@JoinTable(name="contest_entries",
joinColumns = {@JoinColumn(name = "contest_fk", referencedColumnName="contest_id")},
inverseJoinColumns = {@JoinColumn(name = "user_fk", referencedColumnName="id")})
public Set<User> getEntries() {
return entries;
}
这个想法是一个竞赛可以有多个条目。看起来很简单。它生成以下内容:
create table contest (contest_id numeric(19,0) identity not null, primary key (contest_id));
create table contest_entries (contest_fk numeric(19,0) not null, user_fk numeric(19,0) not null, primary key (contest_fk, user_fk));
alter table contest_entries add constraint FK7FBD0C65C4F120C2 foreign key (contest_fk) references contest;
alter table contest_entries add constraint FK7FBD0C656ABC75E3 foreign key (user_fk) references user_profile;
然而,一旦比赛结束,人们的愿望就是举办另一场比赛。当我尝试创建一个新的比赛并让之前输入的用户再次输入时,我得到一个唯一的键约束。查看 DDL 表,确实如此。
所以,从本质上讲,我不能同时进行两场比赛。我也会失去参加比赛的人的历史。那是行不通的。我需要能够在不同的比赛中与相同的用户同时举办两场比赛。
我是 JPA 的新手,所以我必须相信我遗漏了一些明显的东西。系统已经有一个用户表,并且它充满了用户。不希望更改该表结构。关于如何解决这个问题的任何想法?如果重要的话,持久性实现就是 Hibernate。