gpt4 book ai didi

java - JPA @OneToMany 集和独特的内容

转载 作者:行者123 更新时间:2023-12-02 08:38:16 26 4
gpt4 key购买 nike

我有以下情况:

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

最佳答案

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

关于java - JPA @OneToMany 集和独特的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com