Realcionamento de classes com Hibernate e Criteria

5 respostas
zennh

Ola pessoal, eu to quase me descabelando por conta de um relacionamento Hibernate com Criteria se alguem puder me ajudar
ficarei muito agradecido.

o Probelama que tenho é o seguinte:
Tenho uma classe de cadastros e essa tem uma lista de grupos

package br.com.horus.cadastro.model.cadastro;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import br.com.horus.administrativo.model.cliente.ClienteADM;
import br.com.horus.cadastro.model.grupo.Grupo;



@Entity
@Table(name="cadastro")
public class Cadastro implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id_cadastro", nullable = true)
	private int id_cadastro;
	
	@Column
	private String tipoCad;
	
	@Column
	private String nome_cadastro;
	
	@Column
	private String sexo_cadastro;
	
	@Column
	private String estado_civil;
	
	@Column
	private Date nascimento_cadastro;
	
	@Column
	private String cpf_cadastro;
	
	@Column
	private String rg_cadastro;
	
	@Column
	private String observacaoPF;
	
	
	/*
	 * Informa��es da pessoa juridica
	 * 
	 */
	
	@Column
	private String razao_social_cadastro;
	
	@Column
	private String nome_fantasia_cadastro;
	
	@Column
	private Date data_constituicao_cadastro;
	
	@Column
	private String cnpj_cadastro;
	
	@Column
	private String insc_estadual_cadastro;
	
	@Column
	private String observacaoPJ;
	
	/**
	 * Informações de endereço
	 */
	@Column
	private String descricaoEndereco;
	
	@Column
	private String rua;
	
	@Column
	private String numero;
	
	@Column
	private String complemento;
	
	@Column
	private String bairro;
	
	@Column
	private String cep;
	
	@Column
	private String cidade;
	
	@Column 
	private String estado;
	
	@Column
	private String observacaoEndereco;
	/**
	 * 
	 * Fim das informações de endereco
	 * 
	 */
	
	
	
	/**
	 * 
	 * Inicios das informações de telefones
	 * 
	 */
	@Column
	private String telefoneResidencial;
	
	@Column
	private String telefoneComercial;
	
	@Column
	private String celular;
	/**
	 * Fim das declarações de telefone
	 * 
	 */
	
	
	
	/**
	 * 
	 * Inicio das declarações de emails
	 * 
	 */
	@Column
	private String email;
	
	@Column
	private String tipo_;
	
	
	
	
	
	@OneToMany(mappedBy="cadastro", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Email> emailList = new ArrayList<Email>();
	
	@OneToMany(mappedBy="cadastro", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Endereco> enderecoList = new ArrayList<Endereco>();
	
	@OneToMany(mappedBy = "cadastro", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Telefone> telefoneList = new ArrayList<Telefone>();
	
	@JoinTable(name = "grupo_fk", joinColumns = {
	        @JoinColumn(name = "cadastro", referencedColumnName = "id_cadastro")}, inverseJoinColumns = {
	        @JoinColumn(name = "grupo", referencedColumnName = "id_grupo")})
	    @ManyToMany(fetch = FetchType.EAGER)
	private List<Grupo> grupoList = new ArrayList<Grupo>();

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cadastro", nullable=true)
	@Fetch(FetchMode.JOIN)
	private Cadastro cadastro;
	
	@OneToMany(mappedBy="cadastro", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Cadastro> cadastros = new ArrayList<Cadastro>();
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cliente_adm", nullable=true)
	@Fetch(FetchMode.JOIN)
	private ClienteADM clienteADM;
	
	

	public int getId_cadastro() {
		return id_cadastro;
	}

	public void setId_cadastro(int id_cadastro) {
		this.id_cadastro = id_cadastro;
	}

	public String getNome_cadastro() {
		return nome_cadastro;
	}

	public void setNome_cadastro(String nome_cadastro) {
		this.nome_cadastro = nome_cadastro;
	}

	public String getSexo_cadastro() {
		return sexo_cadastro;
	}

	public void setSexo_cadastro(String sexo_cadastro) {
		this.sexo_cadastro = sexo_cadastro;
	}

	public String getEstado_civil() {
		return estado_civil;
	}

	public void setEstado_civil(String estado_civil) {
		this.estado_civil = estado_civil;
	}

	public Date getNascimento_cadastro() {
		return nascimento_cadastro;
	}

	public void setNascimento_cadastro(Date nascimento_cadastro) {
		this.nascimento_cadastro = nascimento_cadastro;
	}

	public String getCpf_cadastro() {
		return cpf_cadastro;
	}

	public void setCpf_cadastro(String cpf_cadastro) {
		this.cpf_cadastro = cpf_cadastro;
	}

	public String getRg_cadastro() {
		return rg_cadastro;
	}

	public void setRg_cadastro(String rg_cadastro) {
		this.rg_cadastro = rg_cadastro;
	}

	public String getObservacaoPF() {
		return observacaoPF;
	}

	public void setObservacaoPF(String observacaoPF) {
		this.observacaoPF = observacaoPF;
	}

	public String getRazao_social_cadastro() {
		return razao_social_cadastro;
	}

	public void setRazao_social_cadastro(String razao_social_cadastro) {
		this.razao_social_cadastro = razao_social_cadastro;
	}

	public String getNome_fantasia_cadastro() {
		return nome_fantasia_cadastro;
	}

	public void setNome_fantasia_cadastro(String nome_fantasia_cadastro) {
		this.nome_fantasia_cadastro = nome_fantasia_cadastro;
	}

	public Date getData_constituicao_cadastro() {
		return data_constituicao_cadastro;
	}

	public void setData_constituicao_cadastro(Date data_constituicao_cadastro) {
		this.data_constituicao_cadastro = data_constituicao_cadastro;
	}

	public String getCnpj_cadastro() {
		return cnpj_cadastro;
	}

	public void setCnpj_cadastro(String cnpj_cadastro) {
		this.cnpj_cadastro = cnpj_cadastro;
	}

	public String getInsc_estadual_cadastro() {
		return insc_estadual_cadastro;
	}

	public void setInsc_estadual_cadastro(String insc_estadual_cadastro) {
		this.insc_estadual_cadastro = insc_estadual_cadastro;
	}

	public String getObservacaoPJ() {
		return observacaoPJ;
	}

	public void setObservacaoPJ(String observacaoPJ) {
		this.observacaoPJ = observacaoPJ;
	}

	public String getDescricaoEndereco() {
		return descricaoEndereco;
	}

	public void setDescricaoEndereco(String descricaoEndereco) {
		this.descricaoEndereco = descricaoEndereco;
	}

	public String getRua() {
		return rua;
	}

	public void setRua(String rua) {
		this.rua = rua;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getObservacaoEndereco() {
		return observacaoEndereco;
	}

	public void setObservacaoEndereco(String observacaoEndereco) {
		this.observacaoEndereco = observacaoEndereco;
	}

	public String getTelefoneResidencial() {
		return telefoneResidencial;
	}

	public void setTelefoneResidencial(String telefoneResidencial) {
		this.telefoneResidencial = telefoneResidencial;
	}

	public String getTelefoneComercial() {
		return telefoneComercial;
	}

	public void setTelefoneComercial(String telefoneComercial) {
		this.telefoneComercial = telefoneComercial;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public List<Email> getEmailList() {
		return emailList;
	}

	public void setEmailList(List<Email> emailList) {
		this.emailList = emailList;
	}

	public List<Endereco> getEnderecoList() {
		return enderecoList;
	}

	public void setEnderecoList(List<Endereco> enderecoList) {
		this.enderecoList = enderecoList;
	}

	public List<Telefone> getTelefoneList() {
		return telefoneList;
	}

	public void setTelefoneList(List<Telefone> telefoneList) {
		this.telefoneList = telefoneList;
	}

	public List<Grupo> getGrupoList() {
		return grupoList;
	}

	public void setGrupoList(List<Grupo> grupoList) {
		this.grupoList = grupoList;
	}

	public Cadastro getCadastro() {
		return cadastro;
	}

	public void setCadastro(Cadastro cadastro) {
		this.cadastro = cadastro;
	}

	public List<Cadastro> getCadastros() {
		return cadastros;
	}

	public void setCadastros(List<Cadastro> cadastros) {
		this.cadastros = cadastros;
	}

	public String getTipo_() {
		return tipo_;
	}

	public void setTipo_(String tipo_) {
		this.tipo_ = tipo_;
	}

	public ClienteADM getClienteADM() {
		return clienteADM;
	}

	public void setClienteADM(ClienteADM clienteADM) {
		this.clienteADM = clienteADM;
	}

	public String getTipoCad() {
		return tipoCad;
	}

	public void setTipoCad(String tipoCad) {
		this.tipoCad = tipoCad;
	}
	
	
	
/*	
	@Override
    public int hashCode() {
        int hash = 0;
        hash += (id_cadastro != 0 ? id_cadastro : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cadastro)) {
            return false;
        }
        Cadastro other = (Cadastro) object;
        if ((this.id_cadastro == 0 && other.id_cadastro != 0) || (this.id_cadastro != 0 && !(this.id_cadastro == other.id_cadastro))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.sissolutions.model.cadastro.Cadastro[id_cadastro=" + id_cadastro + "]";
    }*/
}

Segue classe de Grupo

package br.com.horus.cadastro.model.grupo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import br.com.horus.administrativo.model.cliente.ClienteADM;
import br.com.horus.cadastro.model.cadastro.Cadastro;


@Entity
@Table(name="grupo")
public class Grupo implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id_grupo", nullable=false)
	private int idGrupo;
	
	@Column
	private String nomeGrupo;
	
	@Column
	private String descricao;
	
	@Transient
	private boolean selected;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="grupo", nullable=true)
	@Fetch(FetchMode.JOIN)
	private Grupo grupo;
	
	@OneToMany(mappedBy="grupo", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Grupo> gruposFilhos = new ArrayList<Grupo>();

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cliente_adm", nullable=true)
	@Fetch(FetchMode.JOIN)
	private ClienteADM clienteADM;
	
	@OneToMany(mappedBy="grupoList", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Cadastro> cadastros = new ArrayList<Cadastro>();
	
	public int getIdGrupo() {
		return idGrupo;
	}

	public void setIdGrupo(int idGrupo) {
		this.idGrupo = idGrupo;
	}

	public String getNomeGrupo() {
		return nomeGrupo;
	}

	public void setNomeGrupo(String nomeGrupo) {
		this.nomeGrupo = nomeGrupo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public List<Grupo> getGruposFilhos() {
		return gruposFilhos;
	}

	public void setGruposFilhos(List<Grupo> gruposFilhos) {
		this.gruposFilhos = gruposFilhos;
	}

	public ClienteADM getClienteADM() {
		return clienteADM;
	}

	public void setClienteADM(ClienteADM clienteADM) {
		this.clienteADM = clienteADM;
	}

	public boolean isSelected() {
		return selected;
	}

	public void setSelected(boolean selected) {
		this.selected = selected;
	}

	public List<Cadastro> getCadastros() {
		return cadastros;
	}

	public void setCadastros(List<Cadastro> cadastros) {
		this.cadastros = cadastros;
	}
	
}

eu preciso fazer um select com Criteria
pra trazer todos os cadastros do Grupo x por exemplo

Alguem pode me ajudar?

Grade abraço a todos.

5 Respostas

R

Mas qual o seu problema ? nao ta acontecendo isso ? o problema é no mapeamento mesmo ? onde voce chama sua consulta ?

@OneToMany(mappedBy="grupoList", fetch = FetchType.EAGER)  
    @Fetch(FetchMode.SUBSELECT)  
    private List<Cadastro> cadastros = new ArrayList<Cadastro>();

Troque o @Fetch(FetchMode para JOIN)

@Fetch(FetchMode.JOIN)

e faça testes.

zennh

O problema ta aki na hora de fazer a consulta
que eu não sei como faz heheheh

public List<Cadastro> cadastrosPGrupo(Grupo grups_){
	
	//listaCadastro= session.createCriteria(Cadastro.class).add(Restrictions.like("nomeGrupo", "%a%")).list();
		
	return listaCadastro;
}

eu não sei fazer isso aki
ele ta gravando no banco tudo funcionando direitinho
porem precisso passar um ou mais grupos e ele me trazer
todos cadastros que tem nesse grupo.

Obrigado.

zennh
@OneToMany(mappedBy="grupoList", fetch = FetchType.EAGER)
	@Fetch(FetchMode.JOIN)
	private List<Cadastro> cadastros = new ArrayList<Cadastro>();

deu esse erro.

org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
	at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:66)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:75)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:43)
	at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:33)
	at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:103)
	at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1748)
	at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1752)
	at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:2984)
	at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:2977)
	at org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:690)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:290)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	at br.com.horus.control.util.HibernateUtilMysql.initSessionFactory(HibernateUtilMysql.java:63)
	at br.com.horus.control.util.HibernateUtilMysql.getSessionFactory(HibernateUtilMysql.java:74)
	at Teste.main(Teste.java:22)
Initial SessionFactory creation failed.org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
Exception in thread "main" java.lang.NullPointerException
	at Teste.main(Teste.java:22)

se puder me ajudar, desde ja fico muito agradecido.

R

Entao deixa o seu mapeamento como estava, nao parece que é no fetch type. hummmmmm, agora tipo, voce consegue salvar varios grupos certo ? o esta na hora de traze-los do banco certo ?

zennh

é Agora preciso fazer uma busca de cadastros passando um grupo, porem não sei como fazer isso.

Criado 20 de janeiro de 2013
Ultima resposta 21 de jan. de 2013
Respostas 5
Participantes 2