Relacionamento com annotations(Hibernate gerando Banco)

Boa tarde PessoALL…

Como devo mapear a seguinte situação Usando Annotations??

Tenho a seguintes Entidades que geram o meu banco através do Hibernate…

Classe Aluno


@Entity
public class Aluno {
	@Id
	@GeneratedValue
	private int id_aluno;
	private String nome;
	private Integer idade;

                //Como devo fazer o relacionamento aqui???
                private Curso curso;
	
      //get's e set's
		
}

Classe curso

@Entity
public class Curso {
	@Id
	@GeneratedValue
	private int id_curso;
	private String descricao;
                
                //Como devo fazer o relacionamento aqui??
                private Aluno aluno;
	
	//get's e set's

}

agora o que quero fazer é cadastrar um aluno em um ou vários cursos
tendo em vista também que um curso pode conter vários alunos…

Tô viajando pra fazer esse mapeamento usando @ManyToOne, OneToMany e vice-versa…

Caso possam me ajudar…

Da uma olhada nesse post: http://www.guj.com.br/posts/list/76474.java

acho que vai te ajudar.

Bom dia

Como o romarcio disse acima, oque você vai precisar fazer é um relacionamento Muitos-para-Muitos, a anotação que você terá que utilizar é a @ManyToMany, onde o hibernate irá criar uma tabela associativa no banco de dados para manipular esta associação.

No seu caso as entidades Aluno e Curso irão conter atributos compostos em forma de collection, assim você poderá navegar entre os registros:

   @Entity  
    public class Aluno {  
        @Id  
       @GeneratedValue  
        private int id_aluno;  
        private String nome;  
        private Integer idade;  
  
        @ManyToMany           
        private Set<Curso> curso;  
        
       //get's e set's  
           
  }  

 @Entity  
 public class Curso {  
     @Id  
     @GeneratedValue  
     private int id_curso;  
     private String descricao;  
                   
     @ManyToMany           
     private Set<Aluno> aluno;  
       
     //get's e set's     
 } 

Falou.

Resolvidooo… Gerou Bonitoo!
Tava há algum tempo sem programar… Cabação mesmo!! rsr
Valeu pessoal!

Aproveitar o post para tirar mais uma dúvida…

Na hora cadastrar um Aluno em um curso faço o seguinte, recupero os dados dele numa nova tela e tenho uma combo populada com todos os cursos disponíveis onde seleciono apenas um…

quando clico em salvar faço o seguinte:

public String salvarAlunoCurso(){  
            //cria a sessao com o banco e a transacao...  
            Session session = HibernateUtil.getSession();  
            Transaction t = session.beginTransaction();  
            try{
                //se tudo der certo, salva no banco de dados
           	    //salva o objeto curso e se der tudo certo comita a transacao
                session.merge(aluno);  
                t.commit();  
                SessionUtil.addSuccessMessage("OperacaoSucesso");  
                //limpa formulario (objeto) aluno novas insercoes... 
                aluno = new Aluno();
            }catch(Exception e){ 
           	 //se ocorrer algo errado cancela a transacao
                t.rollback();  
                SessionUtil.addErrorMessage("OperacaoFracasso");  
            }finally{  
           	 //fecha a sessao com o banco de dados
                session.close();  
            }  
            return null;  
        
    }

Quando dou esse session.merge(aluno) ele num deveria atrelar o aluno ao curso selecionado na combo e gravar no banco, tendo em vista que já existe o relacionamento na minha entidade??

Entidade aluno

@ManyToMany (fetch=FetchType.LAZY)
	@JoinColumn(name="id_curso", nullable=false)
	private List<Curso> cursos;

Entidade Curso

@ManyToMany (fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	@JoinColumn(name="id_aluno", nullable=false)
	private List<Aluno> aluno;

minha combo carregada de cursos

                                                <h:selectOneMenu id="id_curso" value="#{cursoBean.curso.id}">
             				<f:selectItem itemLabel="Selecione Uma Opção"/>
             				<f:selectItems value="#{cursoBean.listaTodosCursos}"/>
             			</h:selectOneMenu>

Caso possam me esclarecer mais essa…

em

@ManyToMany (fetch=FetchType.LAZY, cascade=CascadeType.ALL) @JoinColumn(name="id_aluno", nullable=false) private List&lt;Aluno&gt; aluno;

Deve ter alguma anotação do tipo inverse. Quando o mapeamento é feito por xml(como costumo usar) seria inverse=true.

Esse inverse deveria ser adicionado no @JoinColumn(…) eu acho, procurei sobre ele em anotações mas não encontrei nada, se não tiver esse atributo, tenta então com insertable=true, updatable=true