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.