Criteria x DetachedCriteria - Hibernate

Bom Dia a todos.

Usando o hibernate percebi que quando faço um relacionamento many-to-one ele cria um inner join entre as duas tabelas, um one-to-many ele faz um left outer join.
Porém existe algumas formas de mudar este comportamento. Um deles é no mapeamento. No caso do many-to-one se eu colocar not-null=“false” e setar o fetchMode pra este relacionamento para JOIN ele irá mudar de inner join para left outer-join. Outra forma é setando o tipo de relacionamento na hora de criar a criteria (createAlias).

Porém se eu usar a configuração no mapeamento eu amarro para todas as consultas um left outer join, o que pode acarretar em perda de desempenho.

Portanto a melhor maneira seria mudar este relacionamento em tempo de execução usando a criteria.

Agora vem o problema:
Estou usando o spring e pelo que eu percebi usando o HibernateTemplate só consigo executar DetachedCriteria.
Porém o DetachedCriteria tem muitas restrições, e uma delas é não ter a assinatura do método createAlias que aceite como parâmetro o tipo de join entre as tabelas.
Porque o DetachedCriteria tem estas limitações? Tem como usar o HibernateTemplate para executar um Criteria (Criteria não DetachedCriteria)?

alguma sugestão?

Usando callbacks?

public Set<T> findAll() { return (Set<T>)getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(final Session session) { Criteria criteria = session.createCriteria( getEntityClass()); return new HashSet<T>(criteria.list()); } }); }