Hibernate Inserir

4 respostas
V

Pessoal é o seguinte eu estou passando uma coleção de objetos de um determinado tipo Entidade 2 dentro de uma outra entidade 1. Até ae nenhum problema
a operação em cascata tá acontencendo numa boa a entidade 1 é inserida no banco e as entidades 2 também, pra ficar mais claro o relacionamento entre essas
duas entidades é oneToMany. O problema é que mesmo inserindo as entidades a chave da Entidade 1 não fica como chave estrageira na tabela da entidade 2, os objetos
são inseridos mas o campo da entidade pai fica nulo e não sei o pq agradeço a ajuda.

4 Respostas

romarcio

Posta seu mapeamento.

V

Segue os mapeamentos das classes.

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

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

	private String descricao;

	@ManyToOne
	@JoinColumn(name = "idQuestao")
	private Questao questao;

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

	private boolean status;
	
	public Alternativa() {
	}
@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;
V

Desculpa as entidades que fazen a ligação são essas e os atributos são alternativas dentro da entidade Questão e dentro da entidade Alternativa é apenas questão.

romarcio

Acho que talvez vc deve usar a propriedade inverse, mas não tenho certeza se seria isso, mas da uma testada.
Em hbm.xml eu usaria inverse=true, mas com anotações não sei dizer como é, mas acho que seja como você fez aqui:

@ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "prova_questao", joinColumns = { @JoinColumn(name = "idQuestao") }, inverseJoinColumns = { @JoinColumn(name = "idProva") }) private Collection&lt;Prova&gt; provas;

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