Hibernate e inner joins

4 respostas
ribclauport

Boa Tarde, gostaria de saber se alguém pode me informar se quando uso o Hibernate, é possivel estabelecer inners joins…, encontrei somente inserts básicos e selects…, gostaria de saber se alguém pode me indicar material que trate do uso de oracle, mysql tratando desta abordagem. por ex: como receber o resultado de fuctions procedures do oracle, e se isso é usado com ou sem o hibernate…

4 Respostas

Lavieri

ele faz os inner joins automaticamente de acordo com mapeamento da classe … e nesse ponto ele não depende do banco de dados…

a unica parte que depende de DB é nas chamadas de procedures, pois cada banco usa como ker isso o.O e o Hibernate não cobre essa parte, apesar de ter como chamar procedures através dele…

um exemplo de inner join com hibernate é assim

public class Cidade {

@Id @GeneratedValue

private Long id;

private String nome;

@ManyToOne(fetch=FetchType.EAGER)

private Estado estado;

}
public class Estado {

@Id @GenereatedValue

private Long id;

private String nome;

@ManyToOne(fetch=FetchTpe.EAGER)

private Pais pais;

}

quando vc por exemplo, carregar um cidade, ele vai fazer os join sozinho… da mesma forma é para o OneToMany
private Pais pais;

ribclauport

VALEU Lavieri … MUITO BOA DICA… AGORA SEI QUE POSSO FAZER ISSO, POR QUE EU USAVA DIRETO JDBC E ESTABELECIA AS STRINGS DE INNER LÁ… OBRIGADO.

R

Além da técnica citada pelo Lavieri, você também pode fazer inner join’s através de HQL e da API de Critérios. Recomendo consultar o link abaixo:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/performance.html#performance-fetching

a.moraissoares

Galera, surgiu uma dúvida aqui com INNER JOIN com hibernate.

Meu projeto estava em andamento, logo tenho um Objeto Entrevistador que é um @Component do Vraptor, ou seja, é uma tabela no meu banco, e outros objetos que não fazer parte, como Usuario.

Preciso fazer um inner join, entre a tabela entrevistador e usuario, sendo que não existe relacionamento de chaves estrangeiras, ou seja, faço tudo na mão na hora de fazer os selects.

Estou tentando fazer assim:

public List<Object> lista() { List<Object> list = (List<Object>) session.createCriteria(Entrevistador.class).setFetchMode("usuario", FetchMode.JOIN) .add( Restrictions.eq("ativo", 0) ) .list();

NO entanto, quando tento executar isso, me é retornado um erro, falando que o VRaptior 3.1.0 não está no classpath, sendo que ele está, e outras consultas simples, e updates e saves funcionam numa boa.

Gostaria de ajuda para realizar essa busca com INNER JOIN. Já li bastante coisa na documentação do Hibernate.
Outro problema é saber qual o tipo de retorno devo fazer

List ?
ArrayList ?
List ?

Dados:

tabela Entrevistador
ID e ID_USUARIO

table Usuario
ID

ID_USUARIO “referencia” a tabela Usuario pelo ID da mesma.

Aguardo qualquer ajuda, ou dica. Obrigado

Criado 12 de maio de 2009
Ultima resposta 12 de fev. de 2010
Respostas 4
Participantes 4