Ola a todos. Estou com um problema com Hibernate, ja pesquisei o dia inteiro e não encontrei a solução.
Tenho uma classe Lotes que se relaciona 1-N com a classe Documentos, ou seja um lote possui uma collection de documentos. O problema é que tem momentos que quero consultar somente o lote, sem recuperar os documentos desse lote. Mas não to sabendo fazer isso no Hibernate.
Segue o mapeamento:
<class name="Lotes" table="LOTES">
<id name="loteID" type="java.lang.Integer" column="LOTE_ID">
<generator class="native" />
</id>
<property name="dataLote" type="java.util.Date" column="DATA_LOTE" not-null="false"/>
<property name="qtdeDocumentos" type="java.lang.Integer" column="QTDE_DOCUMENTOS" not-null="false"/>
<!-- Documentos -->
<set name="loteDocs"
inverse="true"
cascade="all-delete-orphan"
lazy="true">
<key column="LOTE_ID"/>
<one-to-many class="com.itautec.mdi.documentos.Documentos" />
</set>
</class>
public Lotes getById(int loteId) {
Session session = HibernateUtil.getSessionFactory().openSession();
Lotes lote = null;
try {
lote = (Lotes) session.get(Lotes.class, new Integer(loteId));
} catch (HibernateException ex) {
throw new MyException("Não foi possível obter Lote por Id", ex);
} finally {
//session.close(); // ---> PROBLEMA
}
return lote;
}
Como estou num contexto de webservice, se encerro a session com session.close(), tem uma LazyException, porque o Hibernate sempre vai buscar os documentos do lote (mesmo com lazy="true")
Minha primeira duvida é: como buscar somente os dados do lote, sem que o Hibernate faça fetch nos documento?
Para os momentos que eu preciso dos documentos do lote, eu montei um outro metodo que funciona legal:
public Set<Documentos> listDocsByNumLote(int loteId) {
Session session = HibernateUtil.getSessionFactory().openSession();
Set<Documentos> lista = null;
try {
Lotes l = (Lotes) session.get(Lotes.class, loteId);
Hibernate.initialize( l.getLoteDocs() );
lista = l.getLoteDocs();
} catch (HibernateException ex) {
throw new MyException("Não foi possível obter a lista de Documentos", ex);
} finally {
session.close();
}
return lista;
}
Alguem poderia me ajudar? Sou beginasso de Hibernate.