我的域对象中有一个ManyToMany关系,我想在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的Object替换。这将存储Purchase的所有信息,以及具有ManyToMany关联的Set。
@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);
}
}
答案 0 :(得分:0)
这不是关于Hibernate的。你得到的错误来自数据库:夫妇order_number,id是主键,你不可能插入它的多个副本。