事务内的JPA Hibernate查询执行顺序

时间:2019-04-29 17:32:21

标签: hibernate jpa entity one-to-many many-to-one

事务中查询的执行顺序是否始终与代码中的jpa方法调用顺序相同?

我有一个实体Element和一个实体Order。 在Order实体上,我有一个@ManyToOne关系,它是Unidirectional。 在Order表上有对Element表的FK引用,但在Element实体上没有与订单的OneToMany关系。

deleteElement方法首先调用一种方法来删除元素的所有顺序(elementService.deleteOrderElement(element);是在不同的EJB上调用)。

然后它会删除元素本身entityManager.remove(element);

我的问题是,有时在生产环境中,我会收到一个外部约束冲突错误,就好像在delete element查询之前调用了delete order查询一样。 Hibernate可能由于仅存在单向重新分配而只是混合了查询吗? 我无法在测试环境中复制错误。

这是方法代码的一部分。实际方法更复杂,但这是评论家部分。

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void deleteElement(Set<Long> elementIds,String utente) {
        .....
        Long id = null;
        Iterator<Long> it = idDpi.iterator();
        while (it.hasNext()) {
            Element element =entityManager.find(Element.class, it.next());

            ...
            elementService.deleteOrderElement(element);
            ....
            entityManager.remove(element );
            log.debug("Aggiorna tabella auditing - rimozione dpi");
    }
}

0 个答案:

没有答案
相关问题