Estou tentando criar um método PUT no PedidoResource. Está retomando esse exceção
{
"timestamp": 1556912267762,
"status": 500,
"error": "Internal Server Error",
"message": "attempted to assign id from null one-to-one property [********.domain.Pagamento.pedido]; nested exception is org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [********.domain.Pagamento.pedido]",
"path": "/pedidos/3"
}
No PedidoResource está assim...
@RequestMapping(value="/{id}", method=RequestMethod.PUT)
public ResponseEntity<Void> update(@Valid @RequestBody Pedido obj, @PathVariable Integer id) {
obj.setId(id);
obj = service.update(obj);
return ResponseEntity.noContent().build();
}
No ProdutoService está identico ao método insert, somente retirei a linha obj.setId(null); , o POST funciona perfeitamente
public Pedido update(Pedido obj) {
obj.setInstante(new Date());
obj.setCliente(clienteService.find(obj.getCliente().getId()));
obj.getPagamento().setEstado(EstadoPagamento.PENDENTE);
obj.getPagamento().setPedido(obj);
if (obj.getPagamento() instanceof PagamentoComBoleto) {
PagamentoComBoleto pagto = (PagamentoComBoleto) obj.getPagamento();
boletoService.preencherPagamentoComBoleto(pagto, obj.getInstante());
}
obj.setStatus((byte) 0);
obj.setSic(0);
obj = repo.save(obj);
pagamentoRepository.save(obj.getPagamento());
for (ItemPedido ip : obj.getItens()) {
// ip.setDesconto(0.0);
ip.setProduto(produtoService.find(ip.getProduto().getId()));
ip.setPreco(ip.getProduto().getPreco());
ip.setPedido(obj);
}
itemPedidoRepository.saveAll(obj.getItens());
return obj;
}
esse são os dados q envio pelo Postman
{
"cliente" : {"id" : 1},
"enderecoDeEntrega" : {"id" : 1},
"pagamento" : {
"numeroDeParcelas" : 10,
"@type": "pagamentoComCartao"
},
"itens" : [
{
"quantidade" : 3,
"produto" : {"id" : 3},
"desconto": 0
},
{
"quantidade" : 1,
"produto" : {"id" : 1},
"desconto": 0
}
]
}
a class domain Pedido está assim
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@JsonFormat(pattern="dd/MM/yyyy HH:mm")
private Date instante;
@OneToOne(optional = false, cascade=CascadeType.ALL, mappedBy="pedido")
private Pagamento pagamento;
@ManyToOne
@JoinColumn(name="cliente_id")
private Cliente cliente;
@OneToMany(mappedBy="id.pedido")
private Set<ItemPedido> itens = new HashSet<>();
@ManyToOne
@JoinColumn(name="vendedor_id")
private Vendedor vendedor;
Como posso resolver isso...? Desde já agradeço