我有两个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
实体,但有一些matches
列表,我会得到Duplicate entry '6028' for key 'UK_auyvi1qkpdtaqrpuyv9je5rda'
例外。
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;
}
答案 0 :(得分:2)
匹配可以是两个不同的Algo对象中的一些
然后你没有OneToMany关联,而是ManyToMany关联。因为一个Algo有几场比赛,一场比赛属于几个algos。
更改映射,并相应地更改数据库架构:连接表的PK应该是ID对,而不仅仅是匹配ID。
答案 1 :(得分:1)
由于Match_soccer
可能与许多Algo
实体实例有关系,因此matches
关联/集合必须为`@ 很多 ToMany。
如果您将关联保留为@OneToMany,它将为match_id
定义UK // PK约束,该约束不允许您为两个不同的Algo
实例设置相同的匹配