Inserindo Objetos com Hibernate

4 respostas
V

Galera eu tenho uma entidade no meu sistema Questão e uma outra entidade chamada Alternativa. Essas duas entidades se relacionam
de forma que uma questão possui várias alternativas mas, uma alternativa possui apenas uma questão. O problema é que quando eu vou inserir
uma questão eu passo dentro do objeto questão uma Collection de alternativas e o objeto questão é inserido sem nenhum problema porém quando
vou na tabela de alternativas nenhuma alternativa foi inserida no banco de dados abaixo segue meu mapeamento via annotations do hibernate nas
duas entidades e também o método que estou utilizando para inserir os objetos agradeço a ajuda não tenho idéia de como resolver isso se vcs observarem
já utilizei a annotation cascade que algumas pessoas me falaram que resolveria o problema entretanto o problema persiste.

Classe Alternativa
@Entity
@Table(name = "Alternativa")
public class Alternativa {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long idAlternativa;

	private String descricao;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "idQuestao")
	private Questao questao;

	private int valor;
	
	private String caminhoImagem;
	
	private boolean resposta;

	private boolean status;
	
	public Alternativa() {
	}

Classe Questão

@Entity
@Table(name = "questao")
public class Questao {

	@Id
	private String idQuestao;
	
	@Column
	private String enunciado;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idDisciplina", insertable = true, updatable = true)
	@Fetch(FetchMode.JOIN)
	private Disciplina disciplina;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "cpfMatricula", insertable = true, updatable = true)
	@Fetch(FetchMode.JOIN)
	private Professor professor;

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "prova_questao", joinColumns = { @JoinColumn(name = "idQuestao") },
	inverseJoinColumns = { @JoinColumn(name = "idProva") })
	private Collection<Prova> provas;
	
	@Column
	private int pontuacaoQuestao;

	@Column
	private String comentarioResposta;
	
	@Column
	private String caminhoImagem;
	
	@OneToMany(mappedBy = "questao", cascade=CascadeType.ALL)
	private Collection<Alternativa> alternativas;
	
	@Column
	private String tipo;
	
	@Column
	private int valorSomatorio;

	@OneToMany(mappedBy = "prova", fetch = FetchType.LAZY)
	private Collection<Resposta> respostas;

	private boolean status;
Método inserir Questão
public void inserirQuestao(Questao questao) {

		session = CreateSessionFactory.openSession();
		tx = session.beginTransaction();	
		session.save(questao);		
		tx.commit();		
		session.close();
	}

4 Respostas

lcegatti

Tente o persist

session.persist(questao);
V

Blz galera ele insere numa boa no banco a questão e as alternativas entretanto na tabela alternativa o id da questão q liga a alternativa a sua questão não
é salvo ele fica nulo alguma sugestão?? To postando aqui tb como venho testando o repositorio

public static void main(String[] args) {
		
		RepositorioDisciplina d = new RepositorioDisciplina();
		RepositorioProfessor p = new RepositorioProfessor();
		RepositorioQuestao qeco=new RepositorioQuestao();

		
		Alternativa a1= new Alternativa(null, "tens","A", null, 15, "caminhoImagem", true, true);
		Alternativa a2= new Alternativa(null, "como","B", null, 0, "caminhoImagem", false, true);
		Alternativa a3= new Alternativa(null, "sei", "C", null, 0, "caminhoImagem", false, true);
		Alternativa a4= new Alternativa(null, "olé", "D", null, 0, "caminhoImagem", false, true);
		Alternativa a5= new Alternativa(null, "Ada", "E", null, 0, "caminhoImagem", false, true);
		
		ArrayList<Alternativa> es= new ArrayList<Alternativa>();
		es.add(a1);
		es.add(a2);
		es.add(a3);
		es.add(a4);
		es.add(a5);
		
		
		Questao que= new Questao("140", "Quem foi o que?",d.consultarDisciplina("DI05201140413", "CEMA") , p.consultarProfessor("[telefone removido]"), 15, 
				"comentarioResposta","caminhoImagem", "mutiplaEscolha",  0, es, true);
		
		qeco.inserirQuestao(que);
		
	}
V

O primeiro atributo q é passado com null é o id da alternativa e o quarto atributo q é passado como null é objeto da questão a qual ela pertence. Eu passo ele como
nulo pq como estou passando as alternativas dentro do objeto questão acredito que precise passa-lás de novo…agradeço ajuda pessoal…

V

E agora aparece esse erro nessa situação.

org.hibernate.PersistentObjectException: detached entity passed to persist: pacote.classe

Criado 3 de junho de 2011
Ultima resposta 6 de jun. de 2011
Respostas 4
Participantes 2