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…