gpt4 book ai didi

java - hibernate OneToMany MySQLIntegrityConstraintViolationException : Duplicate entry

转载 作者:行者123 更新时间:2023-11-29 01:54:51 25 4
gpt4 key购买 nike

我有两个 java hibernate 实体:

@Entity
public class Match_soccer extends Match{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int mid;

...

还有一个:

@Entity
public class Algo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@OneToMany
private List<Match_soccer> matches = new ArrayList<Match_soccer>();

...

如果我尝试保存两个不同的 Algo 实体,但有一些 匹配 列表,我会得到 Duplicate entry '6028' for key 'UK_auyvi1qkpdtaqrpuyv9je5rda'异常(exception)。

Hibernate 在数据库中创建 3 个表:Algo Match_soccer 和表:

Algo_Match_soccer
with columns:
Algo1_id int(11)
matches_mid int(11) PK

我的目标是将匹配列表分配给 Algo。匹配可以是 2 个不同的 Algo 对象中的一些。

Algo a1 = new Algo();
Algo a2 = new Algo();
SoccerDAO sd = new SoccerDAO();
List<Match_soccer> ms = sd.getMatches(DateFrom,DateTo); // Matches from database
a1.setMatches(ms);
a2.setMatches(ms);

我用这个函数来插入:

public void insertAlgo(Algo1 a){

try {
session.beginTransaction();
session.save(a);
session.getTransaction().commit();
}
catch (RuntimeException e) {
session.getTransaction().rollback();
session.clear();
throw e;
}

最佳答案

Matches can be some in 2 different Algo objects

那么您没有 OneToMany 关联,而是 ManyToMany 关联。因为一个算法有多个匹配项,一个匹配项属于多个算法。

更改您的映射,并相应地更改数据库架构:连接表的 PK 应该是 ID 对,而不仅仅是匹配 ID。

关于java - hibernate OneToMany MySQLIntegrityConstraintViolationException : Duplicate entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32098818/

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