Problema com Criteria

Pessoal, estou tentando executar uma query no banco com o hibernate e criteria…

olhando a query na saida do console, parece estar tudo ok…

Hibernate: select this_.id_grupo as id1_3_1_, this_.id_cliente as id4_3_1_, this_.nome as nome3_1_, this_.id_grupo_root as id3_3_1_, cliente2_.id_cliente as id1_0_0_, cliente2_.cnpj as cnpj0_0_, cliente2_.email as email0_0_, cliente2_.login as login0_0_, cliente2_.nomeFantasia as nomeFant5_0_0_, cliente2_.razaoSocial as razaoSoc6_0_0_, cliente2_.senha as senha0_0_, cliente2_.telefone as telefone0_0_ from grupo this_ left outer join cliente cliente2_ on this_.id_cliente=cliente2_.id_cliente where this_.id_cliente=?

mas, está dando um erro após a query e nao estou conseguindo compreender o motivo:

org.mentawai.core.ActionException: Can not set java.lang.Long field br.com.dominio.bean.Cliente.id to java.lang.Long
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)

Alguem saberia o motivo de tal erro?

Minha consulta:

Criteria criteria = getSession().createCriteria(Grupo.class);
criteria.add(Restrictions.eq("cliente",cliente.getId())); 
List<Grupo> listGrupo = (List<Grupo>) criteria.list();	
return listGrupo;

abs

tbm tive meus problemas com criteria, e resolvi assim:

tipo o filtro que vc viu é um campo de texto no jsp onde o usuário informe o nome para fazer a consulta, era um campo de filtro, no seu caso não sei, ele não esta pegando o id do campo, ele tem que pegar isso automático?

sim…eu tenho q pegar todos os grupos do cliente q está logado, APENAS os grupos dele!!

cara acho q seu problema ta no id do cliente…

ta tentando comparar um int com long, ou vice versa,

olha no banco se ta o mesmo tipo de variavel da classe pojo

se possivel, postar as classes Grupo e Cliente

esquece criteria e usa hql ou sql nativo…

Cliente:


@Entity
@Table (name = "cliente")
public class Cliente {
	
	@Id		
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id_cliente")	
	private Long id;
	private String razaoSocial;	
	private String nomeFantasia;
	private String cnpj;
	private String telefone;
	private String email;
	private String login;
	private String senha;
	
	@OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Grupo> grupos;
	
	@OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Colaborador> colaboradores;
	
	@OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Mensagem> mensagens;	
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getRazaoSocial() {
		return razaoSocial;
	}
	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}
	public String getNomeFantasia() {
		return nomeFantasia;
	}
	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}
	
	public String getCnpj() {
		return cnpj;
	}
	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public List<Grupo> getGrupos() {
		return grupos;
	}
	public void setGrupos(List<Grupo> grupos) {
		this.grupos = grupos;
	}
	public List<Colaborador> getColaboradores() {
		return colaboradores;
	}
	public void setColaboradores(List<Colaborador> colaboradores) {
		this.colaboradores = colaboradores;
	}
	public List<Mensagem> getMensagens() {
		return mensagens;
	}
	public void setMensagens(List<Mensagem> mensagens) {
		this.mensagens = mensagens;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
}

Grupo


@Entity
@Table (name="grupo")
public class Grupo {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column (name = "id_grupo")
	private Long id;
	
	private String nome;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name= "id_cliente", insertable = true, updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Cliente cliente;
	
	@Column(name="id_grupo_root")
	private Integer root; 	
	
	@OneToMany(mappedBy = "grupo", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Colaborador> colaboradores;
	
	public List<Colaborador> getColaboradores() {
		return colaboradores;
	}
	public void setColaboradores(List<Colaborador> colaboradores) {
		this.colaboradores = colaboradores;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public Integer getRoot() {
		return root;
	}
	public void setRoot(Integer root) {
		this.root = root;
	}
}

No banco de dados ele criou o id como BIGINT…

ok… entendi… isso vai te ajudar…:

    Criteria criteria = getSession().createCriteria(Grupo.class);  
    criteria.createCriteria("cliente").add(Restrictions.eq("id",cliente.getId()));   
    List<Grupo> listGrupo = (List<Grupo>) criteria.list();    
    return listGrupo;  

assim funciona

Lauro, funcionou perfeitamente!

Vc, ou alguem no GUJ, tem algum material sobre de criteria no hibernate?