Tenho um relacionamento entre objetos.... fiz um metodo main para testar e inseriu tudo certinho.....
mas quando tento inserir dados pelos formulários no objeto filho nao recebe a Id do objeto pai... apenas o nome do curso.....
@Entity
@Table(name="tb_aluno")
public class Aluno {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id_aluno")
private int id;
@Column(name="ds_nome")
private String nome;
@OneToMany(mappedBy="aluno", fetch=FetchType.EAGER)
@Cascade(CascadeType.ALL)
private List<AlunoCurso> cursosCadastrados;
Objeto filho (alnoCurso)
public class AlunoCurso {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_alunoCurso")
private int id;
@Column(name="nm_curso")
private String curso;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="id_aluno",insertable=true)
@Fetch(FetchMode.JOIN)
private Aluno aluno;
@OneToMany(mappedBy="alunoCurso", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private List<Nota> notas;
form cadastro aluno
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="/struts-dojo-tags" prefix="sx" %>
<sx:head />
<div>
<s:form action="cadastrarALUNO" >
<s:hidden name="aluno.id"></s:hidden>
<s:textfield name="aluno.nome" label="Nome"></s:textfield>
<sx:submit value="Cadastrar" notifyTopics="listAlunos"></sx:submit>
</s:form>
</div>
<img id="carregandoImg" alt="Carregando..." src="img/carregando.gif" style="display: none;">
<sx:div id="listAluno"
href="listarSimplesALUNO.action"
indicator="carregandoImg"
showLoadingText="true"
loadingText="aguarde...Acessando lista de alunos atualizada."
errorText="Erro ao acessar conteudo"
listenTopics="listAlunos"
delay="2000"
>
</sx:div>
<sx:head />
<table border="1" bordercolor="white" cellpadding="2" cellspacing="2">
<tr>
<td>Aluno: </td>
</tr>
<s:iterator value="aluno">
<tr align="center">
<td><s:property value="aluno.nome" /></td>
</tr>
</s:iterator>
</table>
<div>
<s:form action="cadastrarAlunoCursoALUNO" >
<s:hidden name="alunoCurso.id" />
<s:hidden name="aluno"></s:hidden>
<s:combobox list="vagasDisponiveis"
name="alunoCurso.curso"
label="Curso"
headerValue="Selecione um curso"
headerKey="1">
</s:combobox>
<sx:submit value="Cadastrar" notifyTopics="listAlunos"></sx:submit>
</s:form>
</div>
public String cadastraAlunos(){
return"cadastraAlunos";
}
public String alunoCursoCadastrar(){
aluno = new AlunoDao().consulta(aluno.getId());
vagasDisponiveis = new CursoServicos().comboCursos();
return"cadastraAlunosCurso";
}
public void cadastrar(){
new AlunoDao().inserir(aluno);
}
public void cadastrarAlunoCurso(){
aluno = new AlunoDao().consulta(aluno.getId());
new AlunoCursoDao().inserir(alunoCurso);
}
public void cadastrarAlunoCurso(){
aluno = new AlunoDao().consulta(aluno.getId());
alunoCurso.setAluno(aluno);
new AlunoCursoDao().inserir(alunoCurso);
}
public static void main(String[] args) {
// cadastra um novo aluno
Aluno aluno = new Aluno();
aluno.setNome("teste");
new AlunoDao().inserir(aluno);
//
// Aluno associa-se a um curso
AlunoCurso alunoCurso = new AlunoCurso();
alunoCurso.setCurso("Ajax");
alunoCurso.setAluno(aluno);
new AlunoCursoDao().inserir(alunoCurso);
pq nao nao salva a id quando vou pelos forms ?