Iae pessoal tranquilo, estou tentando fazer um projeto usando o que aprendi no curso e tals, me vejo agora em uma situação onde não tenho ideia de como resolver.
eu tenho uma entidade chamada Questionário e uma outra chamada Perguntas o relacionamento entre as tabelas é o seguinte, um questionário pode ter varias perguntas e uma pergunta pode ter apenas uma questionário.
Até ai acho que fiz tudo certo no que se refere ao relacionamento, pois pelo mysql eu vejo que tem na tabela peguntas uma coluna chamada questionario_id.
No meu form de perguntas o usuário deve escolher qual o questionário essa pergunta pertence, a lista de questionários eu puxei da minha tabela questionário. Até ai tudo bem,
Ai vem a minha duvida, quando tento cadastrar a minha pergunta recebo um exceção NullPointerException
não consigo conceber como eu vou fazer para colocar o id questionário dentro da tabela perguntas?
segue a baixo as minhas classes
package br.com.clienteoculto.models;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
@Entity
public class Questionario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nomeQuestionario;
@Lob
private String descricaoQuestionario;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "questionario")
private List<Pergunta> perguntas = new ArrayList<Pergunta>();
public List<Pergunta> getPergunta() {
return perguntas;
}
public void setPergunta(List<Pergunta> pergunta) {
this.perguntas = pergunta;
}
public String getNomeQuestionario() {
return nomeQuestionario;
}
public void setNomeQuestionario(String nomeQuestionario) {
this.nomeQuestionario = nomeQuestionario;
}
public String getDescricaoQuestionario() {
return descricaoQuestionario;
}
public void setDescricaoQuestionario(String descricaoQuestionario) {
this.descricaoQuestionario = descricaoQuestionario;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package br.com.clienteoculto.models;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Pergunta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
private String pergunta;
@ManyToOne
private Questionario questionario;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPergunta() {
return pergunta;
}
public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}
public Questionario getQuestionario() {
return questionario;
}
public void setQuestionario(Questionario questionario) {
this.questionario = questionario;
}
}
package br.com.clienteoculto.daos;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import br.com.clienteoculto.models.Pergunta;
@Repository
public class PerguntaDAO {
@PersistenceContext
private EntityManager manager;
public void save(Pergunta pergunta) {
manager.persist(pergunta);
}
}
package br.com.clienteoculto.controllers;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import br.com.clienteoculto.daos.PerguntaDAO;
import br.com.clienteoculto.daos.QuestionarioDAO;
import br.com.clienteoculto.models.Pergunta;
@Controller
@RequestMapping("/perguntas")
public class PerguntasController {
@Autowired
private QuestionarioDAO questionarioDAO;
private PerguntaDAO perguntaDAO;
@RequestMapping("/form")
public ModelAndView form(){
ModelAndView modelAndView = new ModelAndView("perguntas/form");
modelAndView.addObject("quest", questionarioDAO.list());
return modelAndView;
}
@Transactional
@RequestMapping(method=RequestMethod.POST)
public ModelAndView save(Pergunta pergunta, RedirectAttributes redirectAttributes){
ModelAndView modelAndView = new ModelAndView("clientes/ok");
perguntaDAO.save(pergunta);
redirectAttributes.addFlashAttribute("Sucesso", "pergunta cadastrada com sucesso");
return modelAndView;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>Cliente Oculto</title>
</head>
<body>
<h1>Cadastro de Perguntas</h1>
<c:url value="/perguntas" var="url" />
<form action="${url }" method="post">
<div>
<c:forEach items="${quest }" var="questionario" varStatus="status">
<input type="radio" name="questionario.nomeQuestionario"
value="${questionario.nomeQuestionario}" />${questionario.nomeQuestionario}
</c:forEach>
</div>
<div>
<label for="pergunta">Pergunta</label> <input type="text"
name="pergunta" id="pergunta">
</div>
<div>
<input type="submit" value="Cadastrar">
</div>
</form>
</body>
</html>