我有两个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'异常。
在数据库3中创建休眠表:AlgoMatch_soccer和表:
Algo_Match_soccer
with columns:
Algo1_id    int(11)
matches_mid int(11) PK

我的目标是把比赛名单分配给阿尔戈。匹配可以是两个不同的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;
}

最佳答案

匹配可以是两个不同的Algo对象中的一些
那你就没有一对一的关系,而是一对多的关系。因为一个算法有几个匹配项,而一个匹配项属于几个算法。
更改映射,并相应地更改数据库模式:联接表的PK应该是一对ID,而不仅仅是匹配ID。

10-07 16:07