0

我的域对象中有一个多对多关系,我想在 JoinTable 中使用双重条目。目前我的代码如下所示:

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="Purchase_BasicProduct", 
            joinColumns={@JoinColumn(name="order_number")}, 
            inverseJoinColumns={@JoinColumn(name="id")})
private Set<BasicProduct> BasicProducts = new HashSet<BasicProduct>();

而不是 Set 我想使用 List 来启用双条目 JoinTable。但是当我使用一个列表并第二次存储相同的条目时,我得到了这个错误

ERROR:  duplicate key value violates unique constraint "purchase_basicproduct_pkey"
DETAIL:  Key (order_number, id)=(703, 4) already exists.

是否有可能在可连接件中停用这种独特的约束。还是使用第三列来存储条目的出现次数会更好?如果是这种情况,我该如何存储第三列,然后再查询呢?

编辑:为了保存,我使用通用方法。这是代码。T 由一个名为 Purchase 的对象代替。这存储了购买的所有信息,以及具有多对多关联的集合。

@Transactional
public void createEntity(T entity) throws DAOException {
    if(entity == null) {
        throw new IllegalArgumentException("entity mustn't be null!");
    }

    try{
        em.persist(entity);
    } catch(IllegalStateException e) {
        throw new DAOException("Can't update Entity!", e);
    } catch(TransactionRequiredException e) {
        throw new DAOException("Can't update Entity!", e);
    } catch(EntityExistsException e) {
        throw new DAOException("Can't update Entity!", e);
    }
}
4

1 回答 1

0

这与休眠无关。你得到的错误来自数据库:一对 order_number, id 是一个主键,你不可能插入它的多个副本。

于 2013-06-07T14:05:30.420 回答