Mapeamento Chave Composta

5 respostas
A

Olá pessoal, estou com um probleminha para resolver, referente ao mapeamento do hibernate, dei uma procurada no forum e não encontrei nada para esse meu caso especifico.
Meu caso é o seguinte…
Tenho as seguintes tabelas: Atividade, Venda, Pessoa
A nível de classe para que vcs entendam a modelagem está assim: a classe Venda extende de Atividade, e também possui um objeto Pessoa dentro dela.
A tabela Venda então possui uma chave composta (atividade_id e pessoa_id).
Meu problema está em como montar o hbm dessa situação, mais especificamente a ligação das chaves.

Atenciosamente Anderson,

5 Respostas

A

Cara, imagino que isso seria mais fácil fazer com annotations, mas caso ainda queira fazer com hbm é melhor você colocar o código, sem ele fica difícil responder.
Até.

romarcio

Na tabela que você tenha a chave estrangeira, coloca no seu mapeamento assim:

<many-to-one name="Atividade" class="Atividade">
            <column name="atividade_id" not-null="false"/>
</many-to-one>

<many-to-one name="Pessoa" class="Pessoa">
            <column name="pessoa_id" not-null="false"/>
</many-to-one>
J

romarcio:
Na tabela que você tenha a chave estrangeira, coloca no seu mapeamento assim:

<many-to-one name="Atividade" class="Atividade">
            <column name="atividade_id" not-null="false"/>
</many-to-one>

<many-to-one name="Pessoa" class="Pessoa">
            <column name="pessoa_id" not-null="false"/>
</many-to-one>

Não conheço nada de Hibernate… mas isso é hbm? É apartir daí que o banco é criado com as regras de integridade e consistencia??

A

Primeiramente obrigado pelas respostas, então...
Seguindo o que vc me passou o meu mapeamento da Tabela VENDA ficaria assim..??

<hibernate-mapping package="core.negocio">
	<class name="Venda" table="VENDA">
		<many-to-one name="Atividade" class="Atividade">  
			 <column name="atividade_id" not-null="false"/>  
		</many-to-one>  
	   
		<many-to-one name="Pessoa" class="Pessoa">  
			 <column name="pessoa_id" not-null="false"/>  
		</many-to-one> 
		<property name="diaVencimento"/>
		<property name="formaPgto"/>
		<property name="parcelas"/>
		<property name="valor"/>
		<property name="valorEntrada"/>
	</class>
</hibernate-mapping>

mas dai não funcionou, a proposito por ser um extends eu não teria que colocar essa info no mapeamento?

romarcio

Tente assim:

<hibernate-mapping package="core.negocio">
	<class name="Venda" table="VENDA">
                <id name="id" column="ID_VENDA" type="long">
			<generator class="native"/>
		</id>

		<many-to-one name="Atividade" class="Atividade">  
			 <column name="atividade_id" not-null="false"/>  
		</many-to-one>  
	   
		<many-to-one name="Pessoa" class="Pessoa">  
			 <column name="pessoa_id" not-null="false"/>  
		</many-to-one> 
		<property name="diaVencimento" column="DIA_VENCIMENTO" not-null="false"/>
		<property name="formaPgto" column="FORMA_PGTO" not-null="false"/>
		<property name="parcelas" column="PARCELAS" not-null="false"/>
		<property name="valor" column="VALOR" not-null="false"/>
		<property name="valorEntrada" column="VALOR_ENTRADA" not-null="false"/>
	</class>
</hibernate-mapping>

Você deve dizer a qual coluna pertence a property name, como fiz no exemplo acima.

E você deve criar as classes e mapeamento das tabelas Atividade e Pessoa, para que o hibernate se "ache". E também criar o ID da tabela VENDA.

E não esqueça, além do mapeamento .hbm , você deve criar suas classes .java.

Criado 28 de novembro de 2009
Ultima resposta 28 de nov. de 2009
Respostas 5
Participantes 4