事务中查询的执行顺序是否始终与代码中的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");
}
}