Estou com dúvidas de como efetuar a persistência dos dados, enviar do form para o Controller e salvar no banco quando utilizo @ManyToOne.
Tenho tipos e departamentos. Cada tipo tem um departamento. Não consigo cadastrar um novo Tipo referenciando um Departamento já cadastrado. Ex: Tipo: Id=1, Nome= TipoA, Departamento = 1 Departamento : Id=1, Nome=Depto1
Departamento:
@Entity
public class Departamento {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nome;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
Tipo:
@Entity
public class Tipo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nome;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "departamento_id")
private Departamento departamento;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Departamento getDepartamento() {
return departamento;
}
public void setDepartamento(Departamento departamento) {
this.departamento = departamento;
}
Form:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Activities: Form</title>
</head>
<body>
<jsp:include page="../auxiliar/nav.jsp" />
<h1>Cadastro de Tipos</h1>
<form action="/tipos" method="POST">
<div>
<label for="nome">Nome</label>
<input type="text" name="nome">
</div>
<div>
<label for="departamento">Departamento</label>
<select name="departamento" >
<c:forEach items="${departamento}" var="departamentos">
<option value="${departamentos.id}">${departamentos.nome}</option>
</c:forEach>
</select>
</div>
<button type="submit">Cadastrar</button>
</form>
</body>
</html>
Controller:
public class TiposController {
@Autowired
private TipoDAO tipoDao;
@Autowired
private DepartamentoDAO departamentoDao;
@RequestMapping(value = "/form")
public ModelAndView form(Tipo tipo) {
ModelAndView modelAndView = new ModelAndView("tipos/form");
List<Departamento> departamento = departamentoDao.listar();
modelAndView.addObject("departamento", departamento);
return modelAndView;
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView gravar(Tipo tipo, RedirectAttributes redirectAttributes) {
tipoDao.gravar(tipo);
redirectAttributes.addFlashAttribute("sucesso", "Tipo Cadastrado com Sucesso!");
return new ModelAndView("redirect:tipos");
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView listar() {
List<Tipo> tipos = tipoDao.listar();
ModelAndView modelAndView = new ModelAndView("tipos/lista");
modelAndView.addObject("tipo", tipos);
return modelAndView;
}
}