Como forçar Inner Join em uma associação?

2 respostas
kweles

Olá Pessoal!

Tenho uma tabela Itens que tem uma associação com FamiliaComercial.
Toda vez que executo uma criteria o Hibernate utiliza Left Outer Join ao invés de Inner Join. Procurei muito, mas não achei
nada que mostre como posso setar isto via annotation.

@Entity
@Table(name = "item")
public class Item {

		@Id
		private String id_item;
			
		private String descricao;
		
		@ManyToOne
		@JoinColumn( name="id_familiacomercial" )
		private FamiliaComercial familiacomercial;

// getters e setters
}


@Entity
@Table(name="FamiliaComercial")
public class FamiliaComercial {

		@Id
		private String id_FamiliaComercial;
		private String descricao;

// getters e setters
}
Resultado do criteria:
select
        top 30 this_.id_item as id1_11_1_,
        this_.descricao as descricao11_1_,
        this_.id_familiacomercial as id3_11_1_,
        familiacom2_.id_FamiliaComercial as id1_9_0_,
        familiacom2_.descricao as descricao9_0_,
        familiacom2_.pagarProvisao as pagarPro3_9_0_,
        familiacom2_.percentualProvisao as percentu4_9_0_ 
    from
        item this_ 
    left outer join
        FamiliaComercial familiacom2_ 
            on this_.id_familiacomercial=familiacom2_.id_FamiliaComercial 
    where
        (
            this_.id_item=? 
            or this_.descricao like ?
        )

na realidade eu gostaria que ao invés do left outer join fosse apenas inner join

2 Respostas

FieroddPJ

Olá!
Bom, não entendi porque quer o inner join ao invés do left join, mas creio que a framework não irá gerar um inner join para uma associação “tem-um” pois caso não houvesse uma FamiliaComercial o Item não seria encontrado na busca.

Só um chute, tente mapear esse atributo com nullable=false.

kweles

Olá FieroddPJ!

Por questões de performance o inner join é bem melhor do que o left outer join.

Vou testar o nullable.

Obrigado!

Criado 9 de março de 2011
Ultima resposta 9 de mar. de 2011
Respostas 2
Participantes 2