Left Join em hibernate com Criteria

Ola,
Estou construindo uma aplicação que faz uso do Hibernate, estou com um certo problema quanto tento fazer um lef join usando criteria.

Criteria select = sessao2.createCriteria(Estabelecimento.class) .setFetchMode("item", FetchMode.EAGER) .add(Example.create(x)) ;

Oque esta acontecendo eh que esta retornado o mesmo objeto Estabelecimento 3 vezes, pois ele possui 3 Item. Como faço pra ele retornar o objeto apenas uma vez.

Obrigado

Tudo bem?

Cara, tenta o seguinte:

Criteria select = sessao2.createCriteria(Estabelecimento.class)   
                            .setFetchMode("item", FetchMode.JOIN)   
                            .add(Example.create(x)) ; 

Qualquer coisa post de novo aqui!

Um abraço,

Tubarão

Ja tentei isso tb mas não deu certo, tentei de outra forma:

Query select = sessao2.createQuery("from Estabelecimento estab left join fetch estab.item where estab.nome = 'Cultura'");

Tambem não deu certo retornou 3 vezes o mesmo objeto. Sera que é alguma coisa com o mapeamento das classes? vou colocar aqui o codigo dos XML de mapeamento.

Estabelecimento:

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

<class name="persistencia.Estabelecimento">

	<id name="id" type="java.lang.Integer">
		<generator class="increment"/>
	</id>
	
	<property name="nome"		type="string" column="nome"/>
	<property name="ramo"		type="string" column="ramo"/>

	<set name="item"
		 inverse="true"
		 cascade="save-update">
	
		<key column="Estabelecimento_id"/>
		<one-to-many class="persistencia.Item"/>
	
	</set>

</class>
[/code]

Item

<?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="persistencia.Item">
	
		<id name="id"	type="java.lang.Integer">
			<generator class="increment"/>
		</id>
	
		<property name="nome"	type="string" column="nome"/>
		<property name="tipo"	type="string" column="tipo"/>
		<property name="preco"	type="int" column="preco"/>
		<many-to-one 
				name="estabelecimento"
				class="persistencia.Estabelecimento"
				column="Estabelecimento_id"
				/>

			
	</class>
	
	
</hibernate-mapping>

Vlw

veja se esse exemplo te atende: http://www.java2s.com/Code/Java/Hibernate/CriteriaDistinctCriteria.htm

adicionando DISTINCT no seu criteria.

Maravilha funcionou agora. O codigo ficou assim.

Criteria select = sessao2.createCriteria(Estabelecimento.class)
							.setFetchMode("item", FetchMode.EAGER)
							.add(Example.create(x))
							.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
							;

Vlw

Usei essa forma aqui, mas esta propriedade FetchMode.EAGER e FetchMode.LAZY está deprecatado.

Tem outra maneira de fazer esse join e alterar o FechMode? Precisava justamente destes dois.

Na documentação são mostrados os substitutos:

EAGER
Deprecated. use FetchMode.JOIN
LAZY
Deprecated. use FetchMode.SELECT