Persistir apenas um registro no banco

2 respostas
S

Boa Tarde,

Estou com um problema grave. Não consigo persistir apenas um registro no banco de dados.

Metodo de busca no banco.

public VendaItinerario findVendaItinerarioByReserva(int codigoReserva, short codigoItinerario, TipoProduto tipo) {

String strQuery = "select vit from VendaItinerario vit " 
                    + "where vit.codigoReserva = :codigoReserva and vit.codigoItinerario = :codigoItinerario "
                    + "AND vit.tipoProduto= :tipoProduto ORDER BY vit.vendaId DESC";
    
    Query q = em.createQuery(strQuery);
    q.setParameter("codigoItinerario", codigoItinerario);
    q.setParameter("codigoReserva", codigoReserva);
    q.setParameter("tipoProduto", tipo.toString());
    q.setMaxResults(1);
    VendaItinerario x = (VendaItinerario)q.getSingleResult();
    return x;

}


Metodo que verifica e pede um update do objeto:

VendaItinerario vit = cadVendas.findVendaItinerarioByReserva(validacaoDTO.getReserva(),
                                                                     validacaoDTO.getItinerario(),
                                                                     TipoProduto.CR);

        if (vit == null) {
            throw new ValidacaoException("venda inexistente para o itinerario");
        }

        if (vit.getStatusVoucher() != VendaItinerario.StatusVoucher.emitir) {
            throw new ValidacaoException("venda com status de voucher invalido");
        }

        cadVendas.update(vit);

Metodo update invocado:

public void update (VendaItinerario vit) {
    vit.setStatusVoucher(VendaItinerario.StatusVoucher.emitido);
    em.merge(vit); //EntityManager de persistencia
}

O objeto em questão possui uma chave “vendaId” da qual é unica, mas com o numero de reserva prevalencendo caso haja vendas futuras para o número de reserva.

Problema:
Quando faço isso, ele me atualiza todos os registros no banco que contenham a condição “emitir” em “emitido” e o numero de reserva, sendo que mais de um registro no banco com vendaId diferentes.

Help please…

2 Respostas

G

Brother,

aqui:

public void update (VendaItinerario vit) {
vit.setStatusVoucher(VendaItinerario.StatusVoucher.emitido);
em.merge(vit); //EntityManager de persistencia
}

Pq tu nao faz um findById, atualiza a propriedade e da um save?

S

Eu ainda não tenho o vendaID, e quando atualizo ele pega a sessão que está aberta, atualiza e grava.

Como faço pra desvincular o processo anterior e abrir um novo para atulizar pela chave vendaId?

Criado 16 de julho de 2009
Ultima resposta 16 de jul. de 2009
Respostas 2
Participantes 2