Consultas SQL + Hibernate - **Idéias?**

2 respostas
R

Galera,

Estou tendo uma dúvida ao fazer uma consulta SQL + Hibernate, creio que seja coisa muito boba, mas como minha lógica de SQL é péssima, venho até aqui pedir uma ajudinha de como formular essa Consulta.

Tenho Duas Classes - Classe A, e Classe B

Para cada Ocorrência de um Objeto da Classe A, tenho N Objetos da Classe B ( One To Many )

Gostaria de Fazer um Select q me retornasse um array da seguinte maneira

Posicao 1 - Objeto A
Objeto B
Objeto B
Objeto B
Posicao 2 - Objeto A
Objeto B
Objeto B
Objeto B
E assim por diante, ou seja para cada posicao do array terei um objeto A e seus “N” objetos B´s correspondentes… Tem como fazer isso?

Agradeço desde Já
Abraços

2 Respostas

luizrobertofreitas
//Consulta list de itens

public List consultaItens(String campo, long id){

return this.session.createCriteria(this.classe).add(Restrictions.eq(campo,id)).setCacheable(false).list();

}

Utilização:

//Classe pedido

public class Pedido{

private long cdPedido;
//Construtor

public Pedido(){}

}
//Classe Itens

public class Itens{

private Pedido pedido;

private Peca peca
//Construtor

public Itens(){}

}

Como ficaria a chamada do método utilizando estas duas classes

List li = consultaItens(“pedido.cdPedido”, 1);

Deve-se levar em consideração que vc está realizando esta consulta a partir da classe Itens, ou seja, informando o código do pedido, será retornado N itens.

Espero que tenha ajudado

geidivan

Para isso, basta setar a propriedade FetchType da sua classe pojo. Nela você define um objeto que será um conjunto de objetos B, o FetchType.EAGER define que toda vez que você buscar o objeto A, todos os objetos B relacionados a ele serão buscados:

// Tabela de perfil
import java.util.List;
import javax.persistence.Id;
import java.io.Serializable;
import javax.persistence.Table;
import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity @Table(name="perfil", schema="banco")
public class Perfil implements Serializable {
   
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)   
   @Column(name="codigo_perfil", length=2, nullable=false)   
   private int codigo_perfil;
     
   // Relacionamentos
     @OneToMany(mappedBy="perfil", fetch = FetchType.EAGER)
     @JoinColumn(name="codigo_perfil")
     private List<Usuario> usuarios;
        
   public Perfil() {}

   public int getCodigo_perfil() {
      return codigo_perfil;
   }
   
   public void setCodigo_perfil(int codigo_perfil) {
      this.codigo_perfil = codigo_perfil;
   }

   public List<Usuario> getUsuarios() {
      return usuarios;
   }

   public void setUsuarios(List<Usuario> usuarios) {
      this.usuarios = usuarios;
   }
      
}

// Tabela usuario
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity @Table(name="usuario", schema="banco")
public class Usuario implements Serializable  {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name="codigo_usuario", length=4)   
   private int codigo_usuario;
   
   @ManyToOne(fetch = FetchType.EAGER)   
   @JoinColumn(name="codigo_perfil",insertable=true,updatable=true)
   @Fetch(FetchMode.SELECT)
   private Perfil perfil;
     
   public Usuario() {}

   public int getCodigo_usuario() {
      return codigo_usuario;
   }

   public void setCodigo_usuario(int codigo_usuario) {
      this.codigo_usuario = codigo_usuario;
   }

   public Perfil getPerfil() {
      return perfil;
   }

   public void setPerfil(Perfil perfil) {
      this.perfil = perfil;
   }
      
}

Assim, basta fazer o select normalmente de um Perfil que o hibernate irá setar a lista de usuários que tem aquele perfil. Aí é só dar um getUsuarios() e percorrer a lista com um for.

Criado 29 de dezembro de 2008
Ultima resposta 30 de dez. de 2008
Respostas 2
Participantes 3