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.