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.
Posta seu mapeamento.
Segue os mapeamentos das classes.
[code]
@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() {
}[/code]
[code]
@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;[/code]
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.
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<Prova> provas;