0

我有以下情况:

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

4

1 回答 1

2

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

于 2009-03-30T13:47:41.607 回答