Colections no Hibernate

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

ele nao retorna em branco :slight_smile:

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

O array vem certo, se tem 5 itens vem 5. :slight_smile:
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

[code]<?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>[/code]

Empresa.hbm.xml

[code]<?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"/>

  &lt;array name=&quot;emails&quot; table=&quot;EmpresasEmail&quot; cascade=&quot;all&quot;&gt; 
     &lt;key column=&quot;Empresa_ID&quot;/&gt; 
     &lt;index column=&quot;Email_ID&quot;/&gt; 
     &lt;many-to-many column=&quot;ID&quot; class=&quot;model.Email&quot;/&gt; 
  &lt;/array&gt; 

</class>
</hibernate-mapping>[/code]

[code]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&#40;&#41;;

	saveEmail&#40;session&#41;;

	saveEmpresa&#40;session&#41;;

	loadEmpresa&#40;session&#41;;

	closeSession&#40;session&#41;;
&#125;

private static SessionFactory getSessionFactory&#40;&#41; throws MappingException, HibernateException
&#123;
	Configuration c = new Configuration&#40;&#41;;
	c.addClass&#40;Email.class&#41;;
	c.addClass&#40;Empresa.class&#41;;

	SessionFactory sf = c.buildSessionFactory&#40;&#41;;
	return sf;
&#125;

private static void loadEmpresa&#40;Session session&#41; throws HibernateException
&#123;
	System.out.println&#40;&quot;---&quot;&#41;;
	Empresa empresa = &#40;Empresa&#41; session.load&#40;Empresa.class, new Integer&#40;1&#41;&#41;;
	System.out.println&#40;&quot;Empresa&#58; &quot; + empresa.getSite&#40;&#41;&#41;;
	Email&#91;&#93; emails = empresa.getEmails&#40;&#41;;
	for &#40;int i = 0; i &lt; emails.length; i++&#41;
	&#123;
		System.out.println&#40;&quot;email &quot; + i + &quot; -&gt; &quot; + emails&#91;i&#93;.getValue&#40;&#41;&#41;;
	&#125;
	System.out.println&#40;&quot;---&quot;&#41;;
&#125;

private static void saveEmpresa&#40;Session session&#41; throws HibernateException
&#123;
	Email e1 = &#40;Email&#41; session.load&#40;Email.class, new Integer&#40;1&#41;&#41;;
	Email e2 = &#40;Email&#41; session.load&#40;Email.class, new Integer&#40;2&#41;&#41;;
	Email e3 = &#40;Email&#41; session.load&#40;Email.class, new Integer&#40;3&#41;&#41;;

	Empresa empresa = new Empresa&#40;&#41;;
	empresa.setSite&#40;&quot;http&#58;//www.wasys.com.br&quot;&#41;;
	empresa.setEmails&#40;new Email&#91;&#93; &#123; e1, e2, e3 &#125;&#41;;
	session.save&#40;empresa&#41;;
&#125;
private static void closeSession&#40;Session session&#41; throws HibernateException, SQLException
&#123;
	session.flush&#40;&#41;;
	session.connection&#40;&#41;.commit&#40;&#41;;
	session.close&#40;&#41;;
&#125;
private static void saveEmail&#40;Session session&#41; throws HibernateException
&#123;
	Email e = new Email&#40;&#41;;
	e.setValue&#40;&quot;a@wasys.com.br&quot;&#41;;
	session.save&#40;e&#41;;

	e = new Email&#40;&#41;;
	e.setValue&#40;&quot;b@wasys.com.br&quot;&#41;;
	session.save&#40;e&#41;;

	e = new Email&#40;&#41;;
	e.setValue&#40;&quot;c@wasys.com.br&quot;&#41;;
	session.save&#40;e&#41;;
&#125;

}
[/code]

create table EmpresasEmail &#40;Empresa_ID INTEGER not null, ID INTEGER not null, Email_ID INTEGER not null, primary key &#40;Empresa_ID, Email_ID&#41;&#41;
create table Email &#40;id INTEGER NOT NULL AUTO_INCREMENT, value VARCHAR&#40;255&#41;, primary key &#40;id&#41;&#41;
create table Empresa &#40;id INTEGER NOT NULL AUTO_INCREMENT, site VARCHAR&#40;255&#41;, primary key &#40;id&#41;&#41;
alter table EmpresasEmail add index &#40;Empresa_ID&#41;, add constraint FK7956D092ACD450B1 foreign key &#40;Empresa_ID&#41; references Empresa &#40;id&#41;
alter table EmpresasEmail add index &#40;ID&#41;, add constraint FK7956D09291B foreign key &#40;ID&#41; references Email &#40;id&#41;

Se rodar o exemplo, vai imprimir:

Empresa&#58; http&#58;//www.wasys.com.br email 0 -&gt; a@wasys.com.br email 1 -&gt; b@wasys.com.br email 2 -&gt; b@wasys.com.br

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

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