Junção externa desnecessária com Criteria

0 respostas
lucasvenez

Olá a todos,

Estou desenvolvendo um sistema o qual possui um relacionamento equivalente ao a seguir: Docente extends Concurso. Esse foi mapeado como uma joined-subclass:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping SYSTEM
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
	
<hibernate-mapping package="br.unesp.ourinhos.model">

	<joined-subclass name="Docente" extends="Concurso">
	
		<key column="idConcurso" foreign-key="pk_fk_concurso"/>
			
		<property name="carater" type="string" length="60" not-null="true"/>
		
		<set name="disciplinas" table="Disciplinas" inverse="true">
			<key column="idConcurso" not-null="true"/>
			<many-to-many class="Disciplina"/>
		</set>
	
	</joined-subclass>

</hibernate-mapping>

O mapeamento funcionou perfeitamente, no entanto, quando executo o método abaixo, o Hibernate gera uma junção externa pela direita que retorna dados indesejados.

@SuppressWarnings("unchecked")
public List<Concurso> getNextTendersByYear( Integer year ) {
		
	List<Concurso> result = (List<Concurso>)super.getSession().createCriteria( Concurso.class )
		.add( Restrictions.sqlRestriction( "EXTRACT( YEAR FROM dataPublicacao ) = " + year  ) )
		.add( Restrictions.eq( "encerrado", 'N' ) )
		.add( Restrictions.gt( "inicioInscricao", new Date() ) )
		.list();
	
	return result;
}

O código SQL gerado é o seguinte:

select 
	this_.idConcurso as idConcurso0_0_, 
	this_.cargo as cargo0_0_, 
	this_.numeroVagas as numeroVa3_0_0_, 
	this_.dataPublicacao as dataPubl4_0_0_, 
	this_.inicioInscricao as inicioIn5_0_0_, 
	this_.terminoInscricao as terminoI6_0_0_, 
	this_.urlInscricao as urlInscr7_0_0_, 
	this_.encerrado as encerrado0_0_, 
	this_.ativo as ativo0_0_, 
	this_1_.carater as carater5_0_, 

	case 
		when this_1_.idConcurso is not null then 1 
		when this_.idConcurso is not null then 0 
	end as clazz_0_ 

from 
	Concurso this_ 
		left outer join 
	Docente this_1_ 
		on this_.idConcurso=this_1_.idConcurso

where 
	EXTRACT( YEAR FROM dataPublicacao ) = 2011 and 
	this_.encerrado=? and 
	this_.inicioInscricao>?

A minha pergunta é a seguinte: [color=red]como eu faço para que o Hibernate não gere essa junção externa pela direita (left outer join) utilizando criteria?[/color]

Criado 11 de maio de 2011
Respostas 0
Participantes 1