Colections no Hibernate

4 respostas
Rodrigo_Carvalho_Aul

Alguém sabe pq quando quando uso arrays pra fazer uma collections no Hibernate ele sempre me retorna o primeiro item da array em branco?

Por exemplo:

Empresa.hbm.xml

<hibernate-mapping>
	<class name="br.com.intranet.model.Empresa" table="Empresas">
		<id name="id" type="int" unsaved-value="null">
			<generator class="identity" />
		</id>
		<property name="cnpj"/>
		<property name="razaoSocial"/>
		<property name="inscricaoEstadual"/>
		<property name="inscricaoMunicipal"/>
		<property name="site"/>

		<array name="emails" table="EmpresasEmails" cascade="all">
			<key column="Empresa"/>
			<index column="Email"/>
			<many-to-many column="ID" class="br.com.intranet.model.Email"/>
		</array>
		<array name="enderecos" table="EmpresasEnderecos" cascade="all">
			<key column="Empresa"/>
			<index column="Endereco"/>
			<many-to-many column="ID" class="br.com.intranet.model.Endereco"/>
		</array>
		<array name="telefones" table="EmpresasTelefones" cascade="all">
			<key column="Empresa"/>
			<index column="Telefone"/>
			<many-to-many column="ID" class="br.com.intranet.model.Telefone"/>
		</array>
	</class>
</hibernate-mapping>

Empresa.java

public class Empresa {
	private int id;
	private String razaoSocial;
	private String cnpj;
	private String inscricaoEstadual;
	private String inscricaoMunicipal;
	private String site;
	private Email[] emails;
	private Endereco[] enderecos;
	private Telefone[] telefones;

	//getters and setters
}

Alguma idéia?

[]'s

4 Respostas

ricardolecheta

ele nao retorna em branco :slight_smile:

Rodrigo_Carvalho_Aul

Não. Quando não é pra ter nada na collection, beleza, a array vem vazia. Mas se era pra ter 5 itens, a array vem com 6 sendo o primeiro vazio. E assim por diante.

[]'s

ricardolecheta

O array vem certo, se tem 5 itens vem 5. :-)
verifique se sua tabela EmpresasEmail está certa, o "index column" é a posição que ele fica no array, veja se está certo na base.

Email.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping> 
   <class name="model.Email" table="Email"> 
      <id name="id" type="int" unsaved-value="null"> 
         <generator class="identity" /> 
      </id> 
      <property name="value" type="string"/> 
 
   </class> 
</hibernate-mapping>
Empresa.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
	
<hibernate-mapping> 
   <class name="model.Empresa" table="Empresa"> 
      <id name="id" type="int" unsaved-value="null"> 
         <generator class="identity" /> 
      </id> 
      <property name="site" type="string"/> 

      <array name="emails" table="EmpresasEmail" cascade="all"> 
         <key column="Empresa_ID"/> 
         <index column="Email_ID"/> 
         <many-to-many column="ID" class="model.Email"/> 
      </array> 
 
   </class> 
</hibernate-mapping>
package teste;

import java.sql.SQLException;

import model.Email;
import model.Empresa;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class TesteEmpresa
{
	public static void main(String[] args) throws Exception
	{
		SessionFactory sf = getSessionFactory();

		Session session = sf.openSession();

		saveEmail(session);

		saveEmpresa(session);

		loadEmpresa(session);

		closeSession(session);
	}

	private static SessionFactory getSessionFactory() throws MappingException, HibernateException
	{
		Configuration c = new Configuration();
		c.addClass(Email.class);
		c.addClass(Empresa.class);

		SessionFactory sf = c.buildSessionFactory();
		return sf;
	}

	private static void loadEmpresa(Session session) throws HibernateException
	{
		System.out.println("---");
		Empresa empresa = (Empresa) session.load(Empresa.class, new Integer(1));
		System.out.println("Empresa: " + empresa.getSite());
		Email[] emails = empresa.getEmails();
		for (int i = 0; i < emails.length; i++)
		{
			System.out.println("email " + i + " -> " + emails[i].getValue());
		}
		System.out.println("---");
	}

	private static void saveEmpresa(Session session) throws HibernateException
	{
		Email e1 = (Email) session.load(Email.class, new Integer(1));
		Email e2 = (Email) session.load(Email.class, new Integer(2));
		Email e3 = (Email) session.load(Email.class, new Integer(3));

		Empresa empresa = new Empresa();
		empresa.setSite("http://www.wasys.com.br");
		empresa.setEmails(new Email[] { e1, e2, e3 });
		session.save(empresa);
	}
	private static void closeSession(Session session) throws HibernateException, SQLException
	{
		session.flush();
		session.connection().commit();
		session.close();
	}
	private static void saveEmail(Session session) throws HibernateException
	{
		Email e = new Email();
		e.setValue("[email removido]");
		session.save(e);

		e = new Email();
		e.setValue("[email removido]");
		session.save(e);

		e = new Email();
		e.setValue("[email removido]");
		session.save(e);
	}
}
create table EmpresasEmail (Empresa_ID INTEGER not null, ID INTEGER not null, Email_ID INTEGER not null, primary key (Empresa_ID, Email_ID))
create table Email (id INTEGER NOT NULL AUTO_INCREMENT, value VARCHAR(255), primary key (id))
create table Empresa (id INTEGER NOT NULL AUTO_INCREMENT, site VARCHAR(255), primary key (id))
alter table EmpresasEmail add index (Empresa_ID), add constraint FK7956D092ACD450B1 foreign key (Empresa_ID) references Empresa (id)
alter table EmpresasEmail add index (ID), add constraint FK7956D09291B foreign key (ID) references Email (id)
Se rodar o exemplo, vai imprimir:
Empresa: http://www.wasys.com.br
email 0 -> [email removido]
email 1 -> [email removido]
email 2 -> [email removido]

rode este exemplo e veja se continua acontecendo isto com vc, mas o array nao pode vir vazio, a nao ser que algo esteja errado no banco

M

Cara to com esse problema tbm, o primeiro item vem null :stuck_out_tongue: Alguem achou uma solução?

Criado 5 de janeiro de 2004
Ultima resposta 23 de abr. de 2008
Respostas 4
Participantes 3