Problemas com relaçoes Ternárias no Hibernate

2 respostas
A

Pessoal, estou precisando da seguinte ajuda, possuo uma tabela MovimentacaoCaixa, que possui ligação many-to-many com uma tabela Bolsa, ai apareceu uma terceira tabela, chamada MovimentacaoCaixaBolsa, só que nessa tabela preciso de uma campo adicional, chamado valor, bom até ai blz, seguindo o livro Hibernate em Ação, criei uma classe MovimentacaoCaixaBolsa e nas classes MovimentacaoCaixa e Bolsa, protanto mudei o relacionamento dessas classes de many-to-many para many-to-one e dentro do set coloquei um composite-element fazendo referencia para a classe MovimentacaoCaixaBolsa. Então a minha dúvida é a seguinte, preciso criar um hbm para a minha classe MovimentacaoCaixaBolsa (eu na verdade acho q não, mas não achei nada sobre isso), caso não precise, como que eu faço para toda vez que eu for salvar os dados na minha tabela MovimentacaoCaixa, salve tbm na minha MovimentacaoCaixaBolsa(lembro que minhas bolsas já estão cadastradas?
Vou mandar abaixo as minhas classes para que possam ser visualizadas melhor:
Classe MovimentacaoCaixa

public class MovimentacaoCaixa{ private Integer id; private Set<Bolsa> bolsas = new HashSet<Bolsa>(0); //getters e setters }
Classe Bolsa

public class Bolsa{
	private Integer id;
	private Set<MovimentacaoCaixa> movimentacaoCaixas = new HashSet<MovimentacaoCaixa>(0);
//getters e setters

Classe

public class MovimentacaoCaixaBolsa {
	private Double descBolsa;
	private MovimentacaoCaixa movimentacaoCaixa;
	private Bolsa bolsa;
//getters e setters
}

MovimentacaoCaixa.hbm.xml

<hibernate-mapping package="fit.modelo">

    <class name="MovimentacaoCaixa" table="MovimentacaoCaixa">
        <id name="id" type="java.lang.Integer" column="id" unsaved-value="0">
            <generator class="increment">
				<param name="sequence">id_inc</param>
			</generator>
        </id>
        <set name="bolsas" table="MovimentacaoCaixaBolsa" lazy="true">
            <key column="idMovimentacaoCaixa"/>
	    	<composite-element class="MovimentacaoCaixaBolsa">
	    		<parent name="movimentacaoCaixa"/>
        		<many-to-one name="bolsa" class="Bolsa" column="idBolsa" not-null="true"/>
  				<property name="descBolsa" type="java.lang.Double" not-null="true"/>        		
    		</composite-element>
         </set>
    </class>
</hibernate-mapping>

Bolsa.hbm.xml

<hibernate-mapping package="fit.modelo">

    <class name="Bolsa" table="Bolsas">
        <id name="id" type="java.lang.Integer" column="id" unsaved-value="0">
            <generator class="identity" />
        </id>
        <set name="movimentacaoCaixas" table="MovimentacaoCaixaBolsa" cascade="all" inverse="true">
            <key column="idBolsa"/>
           	<composite-element class="MovimentacaoCaixaBolsa">
	    		<parent name="bolsa"/>
        		<many-to-one name="movimentacaoCaixa" class="MovimentacaoCaixa" column="idMovimentacaoCaixa" not-null="true"/>
    		</composite-element>
        </set>
    </class>
</hibernate-mapping>

2 Respostas

A

VAMO LÁ PESSOAL, JÁ REVIREI A INTERNET E NÃO ACHEI NADA, ESTOU PRECISANDO MUITO DISSO E NÃO CONSIGO FAZER… :x

A

É cara, dei uma pesquisa para lhe ajudar mas tb não obitve exito não, fui na documentação do hibernate e não consegui nenhuma ideia animadora. Enquanto não consegue o melhor jeito de fazer, pq não faz manualmente? Tipo, quando vc for atualizar o lado da forte da relação, no caso Movimentação Caixa, faz uma logica para apagar o que já tem na tabela de relacionamento delete from MovimentacaoCaixaBolsa where codMovimentacaoCaixa=:idMovimentacao e depois insere tudo de novo, como o hibernate faria. Isola isso, quando achar a melhor solução só substitui ou passa a ignorar. Nesse caso criaria um hbm para MovimentacaoCaixaBolsa

Alberto

Criado 4 de outubro de 2007
Ultima resposta 5 de out. de 2007
Respostas 2
Participantes 2