Realcionamento de classes com Hibernate e Criteria

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

[code]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 + "]";
}*/

}

[/code]

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.

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.

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.


	@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.

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 ?

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