Relacionamento 1:n com hibernate

2 respostas
H

Senhores,
Meu problema eh o seguinte:
Tenho uma classe Projeto e uma classe Ocorrencia(e tabelas relacionadas).
Um projeto vem varias ocorrencias.
No momento do cadastro do projeto,gostaria de cadastrar tb uma ou mais ocorrencias logo de cara,mas somente o projeto esta sendo salvo.
Eis os codigos dos mapeamentos:

Projeto.hbm.xml

&lt?xml version="1.0"?&gt
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="geosystem.intranet.vo.Projeto">
 
  <id column="id" name="id" type="int"/>
  <property column="id_geo" generated="never" lazy="false" name="id_geo" type="string"/>
  <property column="diretoria" name="diretoria" type="string"/>
  <property column="cliente" name="cliente" type="string"/>
  <property column="status" name="status" type="string"/>
  <property column="responsavel_geo" name="responsavel_geo" type="string"/>
  <property column="responsavel_cliente" name="responsavel_cliente" type="string"/>
  <property column="doc_inicial" name="doc_inicial" type="string"/>
  
  <bag name="ocorrencias" table="ocorrencia" lazy="true" inverse="true" cascade="delete">
  	<key column="id_projeto"/>
  	<one-to-many class="geosystem.intranet.vo.Ocorrencia"/>
  </bag>
 
 </class>
</hibernate-mapping>

Ocorrencia.hbm.xml

&lt?xml version="1.0"?&gt
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="geosystem.intranet.vo.Ocorrencia">
  <id column="id" name="id" type="int"/>
  <property column="data" name="data" type="string"/>
  <property column="descricao" name="descricao" type="string"/>
  
  <many-to-one name="projeto" class="geosystem.intranet.vo.Projeto" cascade="none"
               outer-join="auto"
               update="true" 
               insert="true"
               column="id_projeto"/>
 </class>
</hibernate-mapping>

Codigo de teste:

public class TestaHibernate {
	public static void main(String[]args){
		Projeto p = new Projeto();
		p.setCliente("bla");
		p.setDiretoria("bla");
		p.setDoc_inicial("bla");
		p.setId_geo("bla");
		p.setResponsavel_cliente("bla");
		p.setResponsavel_geo("bla");
		p.setStatus("bla");
		
		Ocorrencia o = new Ocorrencia();
		o.setData("26/02/2007");
		o.setDescricao("bla");
		
		p.getOcorrencias().add(o);
		
		ProjetoDAO.salvaProjeto(p);
	}
}

E finalmento o metodo salvaProjeto:

public static void salvaProjeto(Projeto p){
		SessionFactory sf = new Configuration().configure("/geosystem/intranet/config/hibernate.cfg.xml").buildSessionFactory();
		Session s = sf.openSession();
		Transaction tx = s.beginTransaction();
		
		s.save(p);
		tx.commit();
		s.close();
	}

A questao eh saber pq ocorrencia nao esta sendo salva.
Um abraço à todos.

2 Respostas

plentz

Por causa dos seus cascades, talvez?

_fs

Faltaram algumas propriedades nos mapeamentos dos relacionamentos, basta ler a seção 21.2.

http://www.hibernate.org/hib_docs/v3/reference/en/html/example-parentchild.html

Criado 27 de fevereiro de 2007
Ultima resposta 28 de fev. de 2007
Respostas 2
Participantes 3