Como não trazer um SET do hibernate numa query

0 respostas
M

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>
Segue meu metodo para recuperar os dados:
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.

Criado 26 de novembro de 2009
Respostas 0
Participantes 1