Java JPA:现有实体未更新

Java JPA:现有实体未更新,java,hibernate,jpa,entitymanager,stateless,Java,Hibernate,Jpa,Entitymanager,Stateless,我面临一个问题,在一些非常罕见的情况下(在发送邮件时返回的'updatedContractEntity'中的值是否正确(getContractCode()?),例如,更新但未提交?是的,此时状态正确设置为已支付。但是,如果我回忆正确(构建CRUD控件的开发人员告诉我)所有事务提交都会在请求完成后发生。如果请求过程中出现异常,则会回滚事务。但我可能在此处出错。此外,由于这种情况仅在少数情况下发生,因此调试非常困难。我无法在本地环境中创建此错误。是否还有其他操作ContractEntit的操作y?我

我面临一个问题,在一些非常罕见的情况下(在发送邮件时返回的'updatedContractEntity'中的值是否正确(getContractCode()?),例如,更新但未提交?是的,此时状态正确设置为
已支付
。但是,如果我回忆正确(构建CRUD控件的开发人员告诉我)所有事务提交都会在请求完成后发生。如果请求过程中出现异常,则会回滚事务。但我可能在此处出错。此外,由于这种情况仅在少数情况下发生,因此调试非常困难。我无法在本地环境中创建此错误。是否还有其他操作ContractEntit的操作y?我的猜测是,代码在100%的时间内都能可靠地工作,但偶尔会有另一个进程读取旧值,然后用过时的值覆盖您刚才所做的更改。每分钟都有一个fullfilment调度程序运行。但该调度程序只拉取状态为“已支付”的合同,并且依赖于其他一些值此外,对于提到的合同,这些都不是真的。我有一个事件实体,它是在合同状态更改后创建/更新的。事件实体引用带有@manytone注释的合同实体,而合同引用带有@OneToMany的事件列表(mappedBy=“contract”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)。这可能会导致问题?
@Stateless
public class ContractBoundary {

    @Inject
    private ContractControl contractControl;


    private void setContractToPaidAndNotifyUsers(PaymentEntity paymentEntity, ContractEntity contractEntity, final String paidResourceId) {

        // This is not working (no error, but the contract remains on status STARTED
        contractEntity.setStatus(ContractStatusEnum.PAID);
        contractEntity.setPaidResourceId(paidResourceId);
        ContractEntity updatedContractEntity = contractControl.update(contractEntity);

        // These are working
        mailControl.sendMoneyArrivedMailToPayee(
                contractBoundary.getContractLink(updatedContractEntity.getContractCode()),
                updatedContractEntity.getTitle(), updatedContractEntity.getPayer(), updatedContractEntity.getPayee(),
                eventMoneyArrivedForPayee);
        mailControl.sendMoneyArrivedMailToPayer(
                contractBoundary.getContractLink(updatedContractEntity.getContractCode()), contractEntity.getTitle(),
                updatedContractEntity.getPayer(), updatedContractEntity.getPayee(), eventMoneyArrivedForPayer);


        }
}
public class ContractControl extends BasicCrudControl {

    // ... more CRUD functions

    public ContractEntity update(final ContractEntity contract) {
        ContractEntity update = super.update(contract);
        return update;
    }
}
protected <T> T update(final T entityToUpdate) {
    T t = this.em.merge(entityToUpdate);
    return t;
}