Olá pessoal…
Eu fazendo um projeto onde o usuário cadastra um exercício que pode ter 1 ou mais questões e cada questão pode ter 1 ou mais alternativas, e quando ele clica
’Cadastrar’ persiste todos os dados de uma vez…
até fiz as 3 classes… Exercicio, Questao e Alternativa mas só consegui persistir Exercicio e Questao ao mesmo tempo, a classe Alternativa eu não consegui, pois a classe Questão é
@Embeddable e não pode ter um id gerado pelo banco!!
Alguém sabe uma forma de mapear isso!!!
Se alguém puder ajudar agradeço!!!
Exercicio
@Entity
@Table(name="T_EXERCICIO")
public class Exercicio implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID_EXERCICIO")
private Long id;
@Column(name="NOM_EXERCICIO", length=100, nullable=false)
private String nome;
@ElementCollection
@CollectionTable(name="T_QUESTAO", joinColumns=@JoinColumn(name="FK_EXERCICIO"))
private List<Questao> questoes;
//getters e setters
}
Questao
@Embeddable
@Table(name="T_QUESTAO")
public class Questao {
@Column(name="DSC_VALOR", length=3, nullable=false)
private Integer valor;
@Column(name="DSC_QUESTAO", length=100, nullable=false)
private String descricao;
//getters e setters
}
Alternativa
@Embeddable
@Table(name="T_ALTERNATIVA")
public class Alternativa {
@Column(name="DSC_ALTERNATIVA", length=100, nullable=false)
private String descricao;
@Column(name="DSC_RESPOSTA", length=1, nullable=true)
private String statusResposta;
//getters e setters
}
TesteExercicio
public static void main(String[] args) throws ParseException {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("EXERCICIO");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Exercicio e1 = new Exercicio();
e1.setNome("Contas de somar e subtrair");
Questao q1 = new Questao();
q1.setValor(5);
q1.setDescricao("Quanto é 2 + 2 ?");
Questao q2 = new Questao();
q2.setValor(5);
q2.setDescricao("Quanto é 3 - 2 ?");
List<Questao> questoes = new ArrayList<Questao>();
questoes.add(q1);
questoes.add(q2);
e1.setQuestoes(questoes);
em.persist(e1);
tx.commit();
em.close();
}
valores gerados:
T_EXERCICIO
ID_EXERCICIO | NOM_EXERCICIO
1 Contas de somar e subtrair
T_QUESTAO
FK_EXERCICIO | DSC_QUESTAO | DSC_VALOR
1 Quanto é 2 + 2 ? 5
1 Quanto é 3 - 2 ? 5