我的域对象中有一个多对多关系,我想在 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);
}
}