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?
//Consulta list de itenspublicListconsultaItens(Stringcampo,longid){returnthis.session.createCriteria(this.classe).add(Restrictions.eq(campo,id)).setCacheable(false).list();}
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 perfilimportjava.util.List;importjavax.persistence.Id;importjava.io.Serializable;importjavax.persistence.Table;importjavax.persistence.Entity;importjavax.persistence.Column;importjavax.persistence.FetchType;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.JoinColumn;importjavax.persistence.JoinTable;importjavax.persistence.ManyToMany;importjavax.persistence.OneToMany;importorg.hibernate.annotations.Fetch;importorg.hibernate.annotations.FetchMode;@Entity@Table(name="perfil",schema="banco")publicclassPerfilimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="codigo_perfil",length=2,nullable=false)privateintcodigo_perfil;// Relacionamentos@OneToMany(mappedBy="perfil",fetch=FetchType.EAGER)@JoinColumn(name="codigo_perfil")privateList<Usuario>usuarios;publicPerfil(){}publicintgetCodigo_perfil(){returncodigo_perfil;}publicvoidsetCodigo_perfil(intcodigo_perfil){this.codigo_perfil=codigo_perfil;}publicList<Usuario>getUsuarios(){returnusuarios;}publicvoidsetUsuarios(List<Usuario>usuarios){this.usuarios=usuarios;}}// Tabela usuarioimportjava.io.Serializable;importjavax.persistence.Entity;importjavax.persistence.Table;importjavax.persistence.Id;importjavax.persistence.Column;importjavax.persistence.FetchType;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;importorg.hibernate.annotations.Fetch;importorg.hibernate.annotations.FetchMode;@Entity@Table(name="usuario",schema="banco")publicclassUsuarioimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="codigo_usuario",length=4)privateintcodigo_usuario;@ManyToOne(fetch=FetchType.EAGER)@JoinColumn(name="codigo_perfil",insertable=true,updatable=true)@Fetch(FetchMode.SELECT)privatePerfilperfil;publicUsuario(){}publicintgetCodigo_usuario(){returncodigo_usuario;}publicvoidsetCodigo_usuario(intcodigo_usuario){this.codigo_usuario=codigo_usuario;}publicPerfilgetPerfil(){returnperfil;}publicvoidsetPerfil(Perfilperfil){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.