Estou fazendo um projeto usando a lógica do curso de Spring mvc (aplicando o que aprendi). Estou tendo um problema de atualizar os danos no banco de dados. Meu controller
@Controller
@RequestMapping("/transacao")
public class TransacaoController {
@Autowired
private ClienteDAO clienteDAO;
@RequestMapping(method = RequestMethod.GET, value = "/deposita/{id}")
public ModelAndView form(@PathVariable("id") int id) {
ModelAndView modelAndView = new ModelAndView("transacao/transacao");
Cliente cliente = clienteDAO.find(id);
modelAndView.addObject("cliente", cliente);
return modelAndView;
}
@RequestMapping(method = RequestMethod.POST, value = "/deposita/{id}")
public ModelAndView deposita(@PathVariable("id") int id, Cliente cliente) {
ModelAndView modelAndView = new ModelAndView("redirect:/");
//Cliente cliente = clienteDAO.find(id);
clienteDAO.atualiza(cliente);
modelAndView.addObject("cliente", cliente);
return modelAndView;
}
}
Dao
@Repository
@Transactional
public class ClienteDAO {
@PersistenceContext
private EntityManager manager;
public void gravar(Cliente cliente) {
manager.persist(cliente);
}
public void atualiza(Cliente cliente) {
manager.merge(cliente);
}
public Cliente getProduto(Integer id) {
Cliente cliente = manager.find(Cliente.class, id);
return cliente;
}
public List<Cliente> listar() {
return manager.createQuery("select c from Cliente c", Cliente.class)
.getResultList();
}
public Cliente find(int id) {
return manager.find(Cliente.class, id);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form:form action="${s:mvcUrl('TC#deposita').arg(0,cliente.id).build() }" method="post"
modelAttribute="cliente">
<div>
<input type="number" name="conta.deposita" />
<button type="submit">Depositar</button>
</div>
</form:form>
</body>
</html>
Eu quero fazer um deposito na conta com Id "x". O controller me envia para o jsp que devolve o valor do deposito para ser atualizado no banco de dados. Essa foi a lógica que usei, mas acho que errei em algo, estava dando o erro
detached entity passed to persist
mexi em algumas coisas e não ocorre mais, mas também não acontece nada.