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
fnandos
Fevereiro 26, 2008, 9:16am
#2
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?