No meu projeto eu crio um cliente e para cada cliente existem x produtos, porem quando crio o segundo produto, ao invés de ele ser inserido no banco de dados, o primeiro produto é atualizado com as informações do segundo
public class ProdutoDao {
@PersistenceContext
private EntityManager manager;
@Autowired
private MovimentacaoDao movimentacaoDao;
public void persist(Produto produto) {
if (produto.getId() == null) {
manager.persist(produto);
}
else {
manager.merge(produto);
}
}
@Controller
@RequestMapping("/produtos")
public class ProdutoController {
@Autowired
private ClienteDao clienteDao;
@Autowired
private ProdutoDao produtoDao;
@RequestMapping(value = "/{id}/form")
public ModelAndView form(@PathVariable Integer id) {
ModelAndView modelAndView = new ModelAndView("produtos/form");
Cliente cliente = clienteDao.getCliente(id);
modelAndView.addObject("cliente", cliente);
return modelAndView;
}
@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public ModelAndView gravarProduto(@Valid Produto produto, BindingResult result, @PathVariable Integer id) {
if (result.hasErrors()) {
return form(id);
} else {
Cliente cliente = clienteDao.getCliente(id);
produto.setCliente(cliente);
produtoDao.persist(produto);
return new ModelAndView("redirect:/produtos/{id}");
}
}
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotEmpty(message = "Insira um nome")
private String nome;
@OneToMany(mappedBy = "cliente")
private List<Produto> produtos;
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotEmpty(message = "Insira uma referência")
private String referencia;
@NotEmpty(message = "Insira uma descrição")
private String descricao;
@NotEmpty(message = "Insira um tamanho")
private String tamanho;
@NotEmpty(message = "Insira uma cor")
private String cor;
@NotNull(message = "Somente número maior ou igual a 0")
private Integer estoque;
@ManyToOne
private Cliente cliente;