Hibernate: problema com mapeamento de Objetos

Estou tentando executar uma query HQL mas a inteligencia do hibernate atrapalha um pouco.

Imagine a seguinte estrutura de classes:
A.getId_A()
A.getName()
A.getB() >> returna a classe B
B.getId_B()
B.getName()

Se eu executo uma query no formato HQL:

Select A.Id_A, A.Name, A.B.Id_B , A.B.Name, from A,B where B.Id_B = A.B.Id_B(+)

Eu queria que hibernate gerasse o seguinte SQL:

TA >> Tabela A
TB >> Tabela B

Select TA.Id_TA, TA.Nam_TA, TA.Id_TB , TB.Nam_TB from TA,TB where TB.Id_TB = TA.Id_TB(+)

Mas, como eu uso mapeamento de objetos, A.B.Id_B ao invés de A.Id_B, hibernate gera o seguinte SQL:

Select i1.Id_TA, i1.Nam_TA, i1.Id_TB , i2.Nam_TB from TA i1 , TB i2, TA i3 , TB i4 where i2.Id_TB = i1.Id_TB(+) and i3.Id_TB = i4.Id_TB

Não é meu interesse a segunda parte gerada pelo hibernate na clausula where, nem que ele adicione novamente as tabelas TA e TB na clausula FROM.

Alguém sabe como posso fazer para que ele não gere esta duplicidade, ou alguem me sugere alguma outra alternativa que não seja SQL nativo, pois são mais de 150 campos e tornaria minha função dificil de dar manutenção?

[]`s

Cara,
reconfira seus mapeamentos de A para B!!!
Parece que vc mapeou A para b certo mas tornou a mapear ba para a! Criando um relacionamento Bidirecional!!!
Tente colocar somente um one-to-many de a para b e nao faça referencia em b para A!

estou usando many-to-one.

A possui o código de B
ai gostaria de mapear direto A.getB()

Cara,
entao no seu A vc tera:
<many-to-one name=“B” class=“br.com.vo.B” column=“NOMEDACOLUNAB” foreign-key=“CHAVE” property-ref=“propriedadeB” />
Ai seu propriedadeB vai ser do tipo B
E em B nao mapeie nada!!
Vê se da assim!!

Problema resolvido!

O problema estava na formatação dos meus left outer joins.

Correto:
From A a left outer join B b left outer join C c left outer join c.D d

Errado:

From A a left outer join B b
A a1 left outer join C c
A a2 left outer join c.D d