Hibernate não insere no relacionamento many-to-many

3 respostas
Abdon

Ola pessoal, estou encontrando problemas para relacionamento
many-to-many no hibernate. Ele não exibe nenhum mensagem de erro
mas nao insere dados na tabela de relacionamento.

xml

<?xml version="1.0"?>

&lt;!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;

&lt;hibernate-mapping package="joy.cadastros.bo"&gt;	
	
	&lt;class name="Orientador" table="Orientador"&gt;
		
			&lt;id name="id" column="id_orientador" unsaved-value="null"&gt;
				&lt;generator class="native"/&gt;
			&lt;/id&gt;
			
		&lt;property name="nome"
		type="string" length="50" not-null="true"/&gt;

		&lt;property name="dt_nascimento"
		column="dt_nascimento"
		type="date"/&gt;

		&lt;property name="cpf"
		type="string" length="14" not-null="true"/&gt;		

		&lt;property name="rg"
		type="string" length="14" not-null="true"/&gt;
		
		&lt;property name="email"
		type="string" length="50" not-null="true"/&gt;
		
			&lt;set 
				name="cursos" 
				table="CursosOrientadores" 
				inverse="true"
				lazy="false"
				cascade="all"&gt;

				&lt;key column="id_orientador"/&gt;
				
				&lt;many-to-many class="joy.cadastros.bo.Curso"&gt;
				     &lt;column name="id_tipocurso"/&gt;
				     &lt;column name="id_faculdade"/&gt;
				&lt;/many-to-many&gt;
			&lt;/set&gt;
		
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;

e o xml da outra classe

<?xml version="1.0"?>

&lt;!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;

&lt;hibernate-mapping package="joy.cadastros.bo"&gt;	
	
	&lt;class name="Curso" table="Curso"&gt;
			
		&lt;composite-id&gt;
			&lt;key-many-to-one name="tipoCurso" column="id_tipocurso"/&gt;
			&lt;key-many-to-one name="faculdade" column="id_faculdade"/&gt;
		&lt;/composite-id&gt;
			
		&lt;property name="website" type="string"/&gt; 
		
		&lt;property name="email" type="string"/&gt;
				
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;

Não vou postar as classes pois eu so escrevi os atributos e o eclipse fez os getters and setters entao acredito que não esta ai o erro.
Agradeceria muito se alguem pudesse me ajudar a localizar aonde esta este problema!!
E tipo e estou apenas salvando assom:

//outros sets
organisador.setCursos(set);
save(organisador);

Muito Obrigado,
Abdon

3 Respostas

_fs
<class name="org.hibernate.auction.Category">
    <id name="id" column="ID"/>
    ...
    <bag name="items" table="CATEGORY_ITEM" lazy="true">
        <key column="CATEGORY_ID"/>
        <many-to-many class="org.hibernate.auction.Item" column="ITEM_ID"/>
    </bag>
</class>

<class name="org.hibernate.auction.Item">
    <id name="id" column="ID"/>
    ...

    <!-- inverse end -->
    <bag name="categories" table="CATEGORY_ITEM" inverse="true" lazy="true">
        <key column="ITEM_ID"/>
        <many-to-many class="org.hibernate.auction.Category" column="CATEGORY_ID"/>
    </bag>
</class>
category.getItems().add(item);          // The category now "knows" about the relationship
item.getCategories().add(category);     // The item now "knows" about the relationship

session.update(item);                     // No effect, nothing will be saved!
session.update(category);                 // The relationship will be saved

Ta-da!

Abdon

Ta-da é pouco, vlw mesmo!!! :slight_smile:

tchernomirdin

Opa, eu estava vendo no GUJ você mexe com hibernate, cara estou encontrando algumas dificuldades não sei aonde estou errando, estou tentando mapear duas tabelas no postgres, e não consigo dá uma olhada no código se possivel, []s

Este mapeamento ele é da classe curso vou mandar o que eu fiz em sql, não sei se está certo

<?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>
    <class name="beans.curso"    table="curso">
        <id name="id_curso" column="id_curso" type="int">
             <generator class="increment"/>
        </id>
        <property name="codigo" type="java.lang.String/>
        <property name="nome" type="java.lang.String/>
        <property name="sigla"/>
       
             
      <!-- Mapeamento dos departamentos-->
      <set name="departamentos" table="departamento">
             <key column="id_curso"/>
             <many-to-many column="id_departamento"
                        class="beans.departamento"/>
      </set>
    </class>
</hibernate-mapping>

ESSE CODIGO É O QUE ESTOU QUERENDO MAPEAR

CREATE TABLE curso (
id_curso int,
codigo int,
nome varchar,
sigla var,
id int REFERENCES aluno,
PRIMARY KEY (id_curso)
);

AGORA ESSE MAPEAMENTO ELE É DA TABELA DEPARTAMENTO

<?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>
    <class name="beans.departamento"
           table="departamento">
        <id name="id_departamento" column="ID_DEPARTAMENTO" type="int">
             <generator class="increment"/>
        </id>
        <property name="nome" type="String"/>
        <property name="sigla" type="String
        
                   cascade="save-update"/>
               <!-- Mapeamento dos cursos -->
       <set name="curso" table="departamento_curso"
             inverse="true">
             <key column="id_departamento"/>
             <many-to-many column="id_curso"
                    class="beans.curso"/>
       </set>
    </class>
</hibernate-mapping>

O CODIGO QUE ESTOU USANDO EM SQL DE DEPARTAMENTO É:

CREATE TABLE departamento (
id_departamento int,
nome varchar,
sigla varchar,
id_curso int REFERENCES curso,
PRIMARY KEY (id_departamento)
);

EU FIZ NO BANCO E A CLASSE DO DEPARTAMENTO CURSO, VOU MOSTRAR SÓ A DE SQL.

CREATE TABLE departamento_curso (
id_departamento int REFERENCES departamento,
id_curso int REFERENCES curso
);

CARA SE PUDER ME AJUDAR EU AGRADEÇO, []s

Criado 15 de abril de 2005
Ultima resposta 8 de mai. de 2008
Respostas 3
Participantes 3