将 JPA 与 JBoss EAP 一起使用时出现错误“行已被另一个事务更新或删除”

问题描述 投票:0回答:1

我遇到一个问题,无法对 JSF 表单的任何字段执行第二次连续更新。表单最初加载时默认禁用所有字段。表单底部有一个“修改”按钮,单击该按钮后,我可以编辑任何字段。但是,正如我提到的,第一次更新工作正常,但后续更新会失败,除非我离开该页面然后返回。

这是我的控制器的一部分,我称之为

update
。这是触发更新操作的地方:

 @Override
    public Personne modifierPersonne(Personne Personne, Adresse adresse) throws GererPersonneControllerException {
        verifierExistancePersonne(Personne);
        List<Adresse> adresses = Personne.getAdresses();
        if (adresse.getId() != null) {
            List<Long> ids = adresses.stream().map(Adresse::getId).collect(Collectors.toList());
            int index = ids.indexOf(adresse.getId());
            adresses.set(index, adresse);
            Personne.setAdresses(adresses);
        } else {
            AdresseDedale adresseDedale = new AdresseDedale();
            adresseDedale.setRue(adresse.getRue());
            adresseDedale.setCommune(adresse.getCommune());
            adresseDedale.setCodePostal(adresse.getCodePostal());
            adresse.setTypeAdresse(TYPE_ADRESSE.RESIDENCE.getCode());
            adresse.setAdresseDedale(adresseDedale);
            List<Adresse> adresses1 = new ArrayList<>();
            Adresse adresseTosave = adresseDap.create(adresse);
            adresses1.add(adresseTosave);
            Personne = PersonneDap.find(Personne.getId());
            Personne.setAdresses(adresses1);
        }
        try {
            return PersonneDap.update(Personne);
        } catch (PersistenceException e) {
            logException(e);
            
        }
    }

这是负责执行更新的代码:

@Transactional(Transactional.TxType.REQUIRED)
public T update(T entity) {
   
        return entityManager.merge(entity);
    
}
java hibernate jpa jsf transactions
1个回答
0
投票

合并后尝试

entityManager.flush()

© www.soinside.com 2019 - 2024. All rights reserved.