Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Auxílio para persistir dados: JSP -> Controller -> Persist (JPA + Hibernate)

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;
    }

}
1 resposta
solução!

Full Code: https://github.com/Fireyz/activities