JPA @OneToMany设置和唯一约束

时间:2009-03-30 13:39:56

标签: java jpa join foreign-keys unique-constraint

我有以下情况:

我有一个充满了用户的系统。希望为在一周左右登录该站点的用户进行竞赛。因此,我需要创建一个新的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。

1 个答案:

答案 0 :(得分:2)

你实际上有多对多的关系。所以你应该使用@ManyToMany注释。

相关问题