Problema com Many-to-Many no Hibernate (XML)

3 respostas
ThiagoWorldCoder

Bom dia pessoal, eu estou a dias com um problema que não estou conseguindo resolver!

Eu estou fazendo um mapeamento de many-to-many, gostaria de saber se eu sou obrigado a mapear a tabela de ligação também! Eu tenho uma classe Armazem, e uma classe Produto, a tabela de ligação tem uma classe chamada ProdutoArmazem, como eu faço esses mapeamentos?Alguém poderia me explicar?

Vejam os mapeamentos que eu fiz e se estão certos:

Da classe Armazem

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="br.com.consist.bean">
<!-- private String codigo;
    private String nome;
    private Tipo tipo;
    private Endereco endereco;
     -->
  <class name="Armazem" table="SE_ARMAZEM">
  	<composite-id>
  		<key-many-to-one name="empresa" class="Empresa">
  			<column name="SE06_MAT_GRU" />
  			<column name="SE06_EMPRESA" />
  		</key-many-to-one>
  		<key-property name="codigo" type="integer" column="SE06_ARMAZEM" />
  	</composite-id>
  	<property name="nome" type="string" column="SE06_NOMEARM" />
  	<component name="endereco" class="Endereco">
  		<property name="bairro" type="string" column="SE06_BAIRRO" />
  		<property name="complemento" type="string" column="SE06_COM_END" />
  		<property name="logradouroNumero" type="integer" column="SE06_LOGRADO" />
  		<component name="cidade" class="Cidade">
  			<property name="codigo" type="integer" column="SE06_CIDADE" />
  		</component>
  	</component>
  	<component name="tipo" class="Tipo">
  		<property name="codigo" type="integer" column="SE06_TPARMAZ" />
  	</component>
  	<set name="produtosArmazem" inverse="true" table="SE_ESTOQ_ARMAZ" lazy="false" fetch="join">
  		<key >
  			<column name="SE22_MAT_GRU" />  			
  			<column name="SE22_EMPRESA" />
  			<column name="SE22_ARMAZEM" />
  		</key>
  		<many-to-many class="Produto">
  			<column name="SE14_MAT_GRU" />
  			<column name="SE14_PRODUTO" />
  		</many-to-many>
  	</set>

Da classe Produto:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="br.com.consist.bean">
  <class name="Produto" table="SE_PRODUTO">
	<composite-id>
		<key-many-to-one name="grupo" class="GrupoEmpresarial" column="SE14_MAT_GRU" />
		<key-property name="codigo" type="string">
			<column name="SE14_PRODUTO" sql-type="varchar" />
		</key-property>
	</composite-id>
	<property name="descricaoProduto" type="string" column="SE14_DESCRIC" />
	<property name="descricaoCompra" type="string" column="SE14_DES_COM" />
	<property name="descricaoFaturamento" type="string" column="SE14_DES_FAT" />
	<set name="produtosArmazem"  table="SE_ESTOQ_ARMAZ" lazy="false" fetch="join">
  		<key >
  			<column name="SE22_MAT_GRU" />  			
  			<column name="SE22_PRODUTO" />
  		</key>
  		<many-to-many class="Armazem">
  			<column name="SE06_EMPRESA" />
  			<column name="SE06_MAT_GRU" />
  			<column name="SE06_ARMAZEM" />
  		</many-to-many>
	</set>
  </class>
</hibernate-mapping>

3 Respostas

rodrigo_gomes

Olá,

Você não precisa criar um mapeamento/entidade para a tabela de relacionamento.

aqui têm alguns exemplos de many-to-many:
http://www.hibernate.org/hib_docs/v3/reference/en/html/example-mappings.html

Caso fique com dúvidas:
http://www.hibernate.org/hib_docs/v3/reference/en/html/

[]´s

ThiagoWorldCoder

Pessoal, eu continuo com o problema!!

O meu problema é o seguinte, vocês devem estar vendo no meu mapeamento, que em many-to-many eu tenho referenciado a mesma coluna que no key, é o SE22_MAT_GRU, essa coluna é o id do GrupoEmpresarial, ela é ao mesmo tempo, chave estrangeira e chave primaria de Armazem, e de Produto, e quando eu faço um relacionamento many-to-many, entre Armazem e Produto, eu preciso estar referenciando elas tanto em many-to-many e no key, aí quando executo ele me fala que estou colocando colunas duplicadas!! Loucura né?!!

<set name="produtosArmazem" inverse="true" table="SE_ESTOQ_ARMAZ" lazy="true" fetch="join">
  		<key >
 	  		<column name="SE22_MAT_GRU"  />
  			<column name="SE22_EMPRESA" />
  			<column name="SE22_ARMAZEM"  />
  		</key>
  		<many-to-many class="Produto">
	  		<column name="SE22_PRODUTO" />
 	  		<column name="SE22_MAT_GRU"  />
  		</many-to-many>
  </set>
ThiagoWorldCoder

Alguém sabe como resolvo isso?

Criado 11 de janeiro de 2008
Ultima resposta 11 de jan. de 2008
Respostas 3
Participantes 2