【发布时间】:2009-03-30 13:39:56
【问题描述】:
我有以下场景:
我有一个充满用户的系统。希望为超过一周左右登录该网站的用户举办竞赛。因此,我需要创建一个新的 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。
【问题讨论】:
标签: java jpa join foreign-keys unique-constraint