1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Delete - erro: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

Caros, possuo três classes inteligadas como pode ser visto nos códigos abaixo. Consigo ler os dados, incluir e alterar sem problema algum. No entanto, quando tento "Excluir", é exibido o seguinte erro no console (removi parte do texto para não poluir o Post, se acharem necessários, eu envio o erro completo):

Hibernate:
    delete 
    from
        documento_geral_entidade 
    where
        id_documento=?
Hibernate: 
    delete 
    from
        documento_geral_Plano 
    where
        id_documento=?
Hibernate: 
    delete 
    from
        documento_geral_entidade 
    where
        id=?
Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

Obs.: - Não consegui capturar os parâmetros passados pelo Hibernate pois estou com problemas para logá-los pelo Log4j - Os dados foram perfeitamente carregados pelo método de carga de documento.

Já tentei deixar apenas dois dos objetos, mas o erro foi o mesmo.... Alguém tem uma luz ? Obrigado.

1) Classe "DocumentoGeral"
import lombok.Data;
@Data
@Entity 
@Table(name="documento_geral")
public class DocumentoGeral {
    @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    private Integer id;
    @OneToMany(mappedBy = "documentoGeral",cascade=CascadeType.ALL, rphanRemoval = true)
    private List<DocumentoGeralEntidade> documentoGeralEntidade;
    @OneToMany(mappedBy = "documentoGeral",cascade=CascadeType.ALL, orphanRemoval = true)
    private List<DocumentoGeralPlano> documentoGeralPlano;    
}

2) Classe "DocumentoGeralEntidade"
import lombok.Data;
@Data
@Entity  
@Table(name="documento_geral_entidade")
public class DocumentoGeralEntidade {    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    private Integer id;        
    @Column(name = "id_entidade", unique = true, nullable = false)
    private Integer idEntidade;    
    @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name = "id_documento", referencedColumnName="id",nullable=false)
    private DocumentoGeral documentoGeral;    
}

3) Classe "DocumentoGeralEntidade"
@Data
@Entity  
@Table(name="documento_geral_Plano")
public class DocumentoGeralPlano {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    private Integer id;    
    @Column(name = "id_plano", unique = true, nullable = false)
    private Integer idPlano;    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_documento", referencedColumnName="id",nullable=false)
    private DocumentoGeral documentoGeral;    
    }    
}

3) Exclusão no Bean
    @ManagedBean(name="DocumentoGeralView")
    @SessionScoped
    @Data
    public class DocumentoGeralView {
        private DocumentoGeral documento = new DocumentoGeral();
    .
    .
    .
    public String remover(Integer idDocumento) {
        carregaDocumento(idDocumento);
        DocumentoGeralDAO.getInstance().delete(documento, documento.getId());
        return "DocumentoGeralCadastro";
    }

4) Exclusão no DAO
    .
    .
    .
    @SuppressWarnings("unchecked")
    public void delete(T _objeto, int _id) {
        try {
            entityManager.clear();
            entityManager.getTransaction().begin();
            T _tmpObjeto = (T) entityManager.find(_objeto.getClass(), _id);
            entityManager.remove(_tmpObjeto);
            entityManager.getTransaction().commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            entityManager.getTransaction().rollback();
        }
    }
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java delete jpa ou faça a sua própria pergunta.