Otimização de consulta via criteria

Olá pessoal, estou gerando uma consulta via Criteria do Hibernate porém gostaria de otimiza-la.

Tenho duas entidades envolvidas.

PerguntaAvaliacao e SintomaAvaliacao

Cada pergunta corresponde a um sintoma, e minha consulta deve retornar todos os sintomas que existem em pelo menos uma pergunta.

Ok, vamos la … abaixo o .hbm.xml das duas entidades envolvidas.

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="entidade.PerguntaAvaliacao" table="PERGUNTA_AVALIACAO"
		dynamic-insert="true" dynamic-update="true">
		<id name="cdPerguntaAvaliacao" type="java.lang.Long" column="CD_PERGUNTA_AVALIACAO" unsaved-value="0">
            <generator class="sequence">
				<param name="sequence">SEQ_PERGUNTA_AVALIACAO</param>
			</generator>
		</id>

<property name="dsPergunta" type="java.lang.String" not-null="true">
			<column name="DS_PERGUNTA" />
		</property>
		
		<many-to-one name="sintomaAvaliacao" class="entidade.SintomaAvaliacao" not-null="true" lazy="false">
			<column name="CD_SINTOMA_AVALIACAO" />
		</many-to-one>
	</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="entidade.SintomaAvaliacao" table="SINTOMA_AVALIACAO" dynamic-insert="true" dynamic-update="true">
		<id name="codigoSintomaAvaliacao" type="java.lang.Long" unsaved-value="0">
            <column name="CD_SINTOMA_AVALIACAO"/>
            <generator class="sequence">
                <param name="sequence">SEQ_SINTOMA_AVALIACAO</param>
            </generator> 
        </id>
		<property name="dsSintoma" type="java.lang.String" not-null="true">
            <column name="DS_SINTOMA" />
        </property>
    </class>
</hibernate-mapping>

Ok … com isso gerei o seguinte método para listar.

public List<SintomaAvaliacao> obterListaSintomasComPergunta() {
		Criteria criteria = getSession().createCriteria(
				PerguntaAvaliacao.class);
		criteria.createAlias("sintomaAvaliacao", "sa");
criteria.setProjection(Projections.property("sintomaAvaliacao")); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		criteria.addOrder(Order.asc("sa.dsSintoma"));
		return criteria.list();
	}

Blza, o resultado esta ok … porém o SQL gerado me parece não ser o melhor.

o Sql Gerado é o seguinte :

Hibernate: select this_.CD_SINTOMA_AVALIACAO as y0_ from PERGUNTA_AVALIACAO this_, SINTOMA_AVALIACAO sa1_, 
where this_.CD_SINTOMA_AVALIACAO=sa1_.CD_SINTOMA_AVALIACAO  order by sa1_.DS_SINTOMA asc

E PARA CADA SINTOMA ENCONTRADO ELE GERA UM NOVO SELECT ASSIM !!!!
Hibernate: select sintomaava0_.CD_SINTOMA_AVALIACAO as CD1_89_0_, sintomaava0_.DS_SINTOMA as DS2_89_0_from SINTOMA_AVALIACAO sintomaava0_ where sintomaava0_.CD_SINTOMA_AVALIACAO=?
09:58:57  INFO SintomaAvaliacaoServiceImpl:71 - EXECUTADO -> obterListaSintomasComPerguntaProtocolo

Blza … eu gostaria de que o SQL gerado já fizesse um join e me gerasse um SQL como este:

select
distinct sa1_.*
from PERGUNTA_AVALIACAO this_,
SINTOMA_AVALIACAO sa1_,
where this_.CD_SINTOMA_AVALIACAO=sa1_.CD_SINTOMA_AVALIACAO
order by sa1_.DS_SINTOMA asc

Ou seja, no próprio SQL gerado ele já tenha os dados do sintoma, não precisando gerar um SQL para cada sintoma posteriormente.

Pessoal, sei que o código é meio extenso, mas se alguém souber alguma forma de me ajudar ficarei muito agradecido.

PS: Preciso desta consulta com Criteria(não pode ser HQL), por padrão estabelecido aqui na empresa.

Estou a disposição para mais esclarecimentos se necessário.

Agradecido.

Olá MAMS
uma pergunta como está mapeado a sua classe de Pergunta ?

Bom dia cara …
Ali em cima esta representado hbm a Classe simplesmente tem os atributos
Long cdPerguntaAvaliacao;
String dsPergunta;
SintomaAvaliacao sintomaAvaliacao;

.
.
getters e setters.