Hibernate - Dúvida Chaves

Olá Pessoal!
Tenho uma classe Alocação:

package bean;

public class Alocacao {
	private Semestre alc_semestre;
	private Curso alc_curso;
	private Professor alc_professor;
	private Atividade alc_atividade;
	private double alc_qtdHoras;

Ela está relacionada com a tabela Semestre, Curso, Professor e Atividade. Minha dúvida está no Alocacao.hbm.xml se tenho que gerar essas chaves como Composite-id ou Many-to-one?
Grato.

Po cara isso vai depender do relacionamento com outra classe…

joga seu diagrama de classes ai, sou iniciante tambem e se estiver falando alguma besteira pessoal por favor me corrijam…

rsrsr*

Uma alocação pode ter um ou vários Semestre, Cursos, Professores e Atividades.
Por exemplo:
Semestre : 2007/2
Curso : Sistema Informacao
Professor : Fulano
Atividade : Aula Banco Dados
Qtd Horas: 40

Semestre : 2007/2
Curso : Sistema Informacao
Professor : Fulano
Atividade : Linguagem SQL
Qtd Horas: 30

Semestre : 2007/2
Curso : Sistema Informacao
Professor : Ciclano
Atividade : Aula JAVA
Qtd : 16 horas

Semestre : 2007/2
Curso : Contabilidade
Professor : Beltrano
Atividade : Contabilidade Basica
Qtd : 36 horas

Quanto ao diagrama,como posso disponibilizar imagens aqui?

Grato.

Considerando:
-Alocação tenha apenas o identificador e ele seja do tipo increment.
-Seu diagrama de classes tenha relacionamentos 1-N com todas as outras classes SEMESTRE CURSO PROFESSOR ATIVIDADE
-Seu banco esteja nesse formato…

Eu acho que é isso ai, nao tenho certeza… o ideal era voce ter passado o seu modelo conceitual com as PK e FK de cada tabela.

Abraços espero te-lo ajudado

<hibernate-mapping>
   <class name="Alocacao">
       <id name="id">
          <generator class="increment">
       </id>
       <set name="semestre" inverse="true" >
          <key column="Alocacao_id">
          <one-to-many class="Semestre">
       </set> 
       <set name="curso" inverse="true" >
          <key column="Alocacao_id">
          <one-to-many class="curso">
       </set>
       <set name="professor" inverse="true" >
          <key column="Alocacao_id">
          <one-to-many class="Professor">
       </set>
       <set name="atividade" inverse="true" >
          <key column="Alocacao_id">
          <one-to-many class="Atividade">
       </set>       
   </class>
</hibernate-mapping>

Olá Cyro!
Quanto ao formato do BD, é isso mesmo, exceto que não tenho ID no Alocação, sendo o PK composto por: id_semestre, id_curso, id_professor e id_atividade. Vi que alguns recomendam implementar um ID e deixar a chave composta com atributo criando-se um Index, não sei se é o ideal. Quanto as chaves compostas, verifiquei alguns materiais e vi que nesses casos há é criado Classe PK para o mapeamento.
Seguindo esse raciocínio, fiz as seguintes implementações:

Classes:

public class Semestre {
	private int smt_id;
	private String smt_descricao;

public class Curso {
	private int crs_id;
	private String crs_codigo;
	private String crs_descricao;

public class Professor {
	private int pfr_id;
	private String pfr_matricula; 
	private String pfr_nome;
	private Titulacao pfr_titulacao;
	private double pfr_qtdHoras;

public class Atividade {
	private int atv_id;
	private String atv_descricao;

Acima estão as classes que se relacionam com Alocação. Abaixo a Classe AlocacaoPK e Alocacao:


public class AlocacaoPK{	
	private Semestre alc_semestre;
	private Curso alc_curso;
	private Professor alc_professor;
	private Atividade alc_atividade;


public class Alocacao {
	private int alc_id;
	private AlocacaoPK alocacaoPK;
	private double alc_qtdHoras;

Abaixo está o Alocacao.hbm.xml:

	<class  name="Alocacao" table="alocacao" lazy="false">
	
		<!-- Identificador da classe -->
		
		<composite-id name="id" class="AlocacaoPK">   
             <key-many-to-one name="semestre" column="smt_id"  />   
             <key-many-to-one name="curso" column="crs_id" />   
             <key-many-to-one name="professor" column="pfr_id" />                
             <key-many-to-one name="atividade" column="atv_id" />                
        </composite-id>   				
 
    	<!-- Propriedades da classe -->
    	<property name="alc_qtdHoras"/>    	
	</class>

Como você expôs eu teria que criar um ID em Alocação eliminando a classe AlocacaoPK. Da forma como registrei acima, não há necessidade.
Qual seria o modelo ideal pra dar sequência no trabalho?
Ah, muito obrigado pelos retornos.
Grato.

Po cara, é o seguinte…
Geralmente é aconselhado criar esse tipo classe “AlocacaoPK” quando existe um relacionamento muito para muitos só no seu caso acredito que nao seja necessário já que Alocacao tem um relacionamento 1 para muitos com os outras classes do modelo.

Ôpa, saquei o lance… Vou adotar a estrutura que você apresentou e ver os resultados…
Muito obrigado pelas dicas.
Um abraço.