如何在Hibernate上允许重复的实体?

时间:2015-10-21 08:19:50

标签: java mysql hibernate

我有两个实体和多个关系。

@Entity
@Table(name ="algo")
public class Algo{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private int id;
   ...
   @ManyToMany
   protected List<DbMatch> matches = new ArrayList<DbMatch>();
   ...

@Entity
@Table(name="matches")
public class DbMatch extends Match{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private int mid;
   ....

当我尝试使用algo列表保存dbmatches时,我在algo_matches表上获得了Duplicate entry '90786' for key 'UK_auyvi1qkpdtaqrpuyv9je5rda'

Table: algo_matches
Columns:
algo_id int(11)
matches_mid int(11)

如何存储不同的algo个对象但是可能存储列表中的重复匹配?

例如algo with algo_id 1与match_id 1匹配,算法algo_id 2与match_id 1匹配

索引

  

algo_matches   0   UK_auyvi1qkpdtaqrpuyv9je5rda   1   matches_mid   一个   5125   空值   空值   BTREE   algo_matches   1   FK_h5utrptgjclq043weh6eks58g   1   algo_id   一个   4   空值   空值   BTREE   algo_matches   1   matches_mid   1   matches_mid   一个   5125   空值   空值   BTREE

在将新匹配添加到列表时,我使用此dao方法更新algo对象:

public void update(Algo a){
    try {           
        session.beginTransaction();
        session.update(a);
        session.getTransaction().commit();
    }
    catch (RuntimeException e) {
        session.getTransaction().rollback();
        session.clear();
        throw e;
    }
}

1 个答案:

答案 0 :(得分:0)

UK_auyvi1qkpdtaqrpuyv9je5rda表中删除algo_matches唯一索引。