以编程方式关闭乐观锁定

时间:2015-04-13 18:46:32

标签: java hibernate

我有一些代码可以将数据库添加到数据库中,以供测试使用。但是,有一些问题,锁定的实体有孩子,因为他们有点保存两次(一次保存孩子,然后再保存父母)。这会产生乐观的锁定错误,因为版本字段始终为空。

有没有办法以编程方式关闭乐观锁定?显然我需要在之后再打开它才能正确运行测试。

我使用以下方法保存:

@PersistenceContext(unitName = "pu")
private EntityManager em;

@Override
public <T extends Entity> T save(T e) {
    return em.merge(e);
}

背景

这个想法如下,我有一个测试数据集可以有这样的结构:一个A类与一个孩子B有一个必需的双面关系。所以我有objs a1和a2都参考了同一个孩子b1。我在枚举中保存了这个obj的引用,所以我可以在测试中使用它们而不需要获取(例如,我可以查询屏幕并检查检索到的名称是否== a1.name)。但我还需要将它们插入数据库。所以我迭代所有灯具,保存它们。它们都设置了id,以保证唯一性(例如a1和a2将具有相同的子节点)。当我保存a1时,它通过级联保存b1。它需要,因为关系是必需的,否则我会得到约束违规。但是,当我保存a2时,它会尝试更新b1,这很好,因为它们是相同的,但是因为我的optVersion为空而被锁定。碰巧我也保存了b1,因为我不知道谁是谁的孩子,无论如何这都是错的。我不想更新optVersion dur以达到性能。我也不想再保存,但这对我来说似乎是不可能的 - 除非我能以编程方式设置所有级联创建但不更新或其他东西(尽管看起来更难)。

0 个答案:

没有答案