gpt4 book ai didi

hibernate - 关于JPA onetomany联接表

转载 作者:行者123 更新时间:2023-12-02 22:31:00 25 4
gpt4 key购买 nike

我有两个实体“用户”和“事件”。每个用户都有一个他喜欢的事件列表。所以我设置了一个 OneToMany 映射,如下所示:

@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "login", length = 64)
protected String login;

@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name = "user_events",
joinColumns = {@JoinColumn(name = "login")},
inverseJoinColumns = {@JoinColumn(name = "event_id")})
protected List<Event> events;
}

@Entity
@Table(name = "events")
public class Event extends BaseEntity{
@Id
@Column(name = "event_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long eventId;

@Column(name = "title", length = 200)
protected String title;
}

现在我有两个用户,首先我让一个用户喜欢一个事件,并且数据库中的联合表正确更新。然后我让另一个用户喜欢相同的事件,但是这次出现错误,指出重复的键值违反了唯一约束“user_events_event_id_key”。我没有在联合表上设置任何约束,所以我不知道这个约束来自哪里。谁能帮我消除这个限制。非常感谢。

最佳答案

该约束可能是由 Hibernate 本身在为您生成架构时设置的。由于您将关联指定为 OneToMany,因此应该只有一个用户喜欢给定的事件。 Hibernate 通过在连接表的 event_id 列上设置唯一约束来保证这一点。

您的关联应该是ManyToMany,并且您不应该使用CascadeType.ALL,因为当用户被删除时,它会删除该用户喜欢的所有事件。

关于hibernate - 关于JPA onetomany联接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392416/

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