O array vem certo, se tem 5 itens vem 5. ![:slight_smile: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)
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"/>
<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>[/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();
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("a@wasys.com.br");
session.save(e);
e = new Email();
e.setValue("b@wasys.com.br");
session.save(e);
e = new Email();
e.setValue("c@wasys.com.br");
session.save(e);
}
}
[/code]
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 -> a@wasys.com.br
email 1 -> b@wasys.com.br
email 2 -> 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