[Resolvido] Consulta JPA por chave estrangeira

Sou novo aqui e não sei trabalhar com Java, mas de metido que sou estou tentando fazer um sistema bem básico com JPA. Eu criei as tabelas, as classes mapeadas e tal, só que assim, tenho uma classe “pessoas”, e uma classe “usuarios” que possui como chave estrangeira o atributo codpessoas. Queria fazer uma consulta pelo código da pessoa na tabela de usuários, mas não consegui fazer funcionar. (Se já existe tópico semelhante me desculpem, mas garimpei e não achei nada, por isso resolvi escrever)

Segue a classe:

[code]package com.perfect2.sistema.model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
*

  • @author alan.malbos
    */
    @Entity
    @Table(name = “usuario”)
    @NamedQueries({
    @NamedQuery(name = “Usuario.findAll”, query = “SELECT u FROM Usuario u”),
    @NamedQuery(name = “Usuario.findByUserAndSenha”, query = “SELECT u FROM Usuario u WHERE u.senhauser = :senhauser AND u.nomeuser = :nomeuser”),
    @NamedQuery(name = “Usuario.findUsuarioByPessoa”, query = “SELECT c FROM Usuario c WHERE c.codpessoa = :codpessoa”)})
    public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = “coduser”, nullable = false)
    private Long coduser;
    @Basic(optional = false)
    @Column(name = “nomeuser”, nullable = false, length = 50)
    private String nomeuser;
    @Basic(optional = false)
    @Column(name = “senhauser”, nullable = false, length = 50)
    private String senhauser;
    @JoinColumn(name = “codpessoa”, referencedColumnName = “codpessoa”, nullable = false)
    @ManyToOne(optional = false)
    private Pessoas pessoas;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “usuario”)
    private Collection pedidoCollection;

    public Usuario() {
    }

    public Usuario(Long coduser) {
    this.coduser = coduser;
    }

    public Usuario(Long coduser, String nomeuser, String senhauser) {
    this.coduser = coduser;
    this.nomeuser = nomeuser;
    this.senhauser = senhauser;
    }

    public Long getCoduser() {
    return coduser;
    }

    public void setCoduser(Long coduser) {
    this.coduser = coduser;
    }

    public String getNomeuser() {
    return nomeuser;
    }

    public void setNomeuser(String nomeuser) {
    this.nomeuser = nomeuser;
    }

    public String getSenhauser() {
    return senhauser;
    }

    public void setSenhauser(String senhauser) {
    this.senhauser = senhauser;
    }

    public Collection getPedidoCollection() {
    return pedidoCollection;
    }

    public void setPedidoCollection(Collection pedidoCollection) {
    this.pedidoCollection = pedidoCollection;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (coduser != null ? coduser.hashCode() : 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 Usuario)) {
    return false;
    }
    Usuario other = (Usuario) object;
    if ((this.coduser == null && other.coduser != null) || (this.coduser != null && !this.coduser.equals(other.coduser))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “com.perfect2.sistema.model.Usuario[coduser=” + coduser + “]”;
    }

    public Pessoas getCodpessoa() {
    return pessoas;
    }

    public void setCodpessoa(Pessoas codpessoa) {
    this.pessoas = codpessoa;
    }

    /**

    • @return the pessoas
      */
      public Pessoas getPessoas() {
      return pessoas;
      }

    /**

    • @param pessoas the pessoas to set
      */
      public void setPessoas(Pessoas pessoas) {
      this.pessoas = pessoas;
      }

}[/code]

(Desculpa ai se não aceitei a tag do código! kkk)

Esse post mostra como realizar consultas: JPA Consultas e Dicas.

Esqueci de colar o erro que tá dando:

Exception Description: Error compiling the query [Usuario.findUsuarioByPessoa: SELECT c FROM Usuario c WHERE c.codpessoa = :codpessoa], line 1, column 33: unknown state or association field [codpessoa] of class [com.perfect2.sistema.model.Usuario].

Eu acho, que como é chave estrangeira, não consigo acessa-la por aqui. (Na verdade eu não acho é nada, não tenho a menor ideia de porque isso não tá funcionando.)

[quote=alanmalbos]Esqueci de colar o erro que tá dando:

Exception Description: Error compiling the query [Usuario.findUsuarioByPessoa: SELECT c FROM Usuario c WHERE c.codpessoa = :codpessoa], line 1, column 33: unknown state or association field [codpessoa] of class [com.perfect2.sistema.model.Usuario].

Eu acho, que como é chave estrangeira, não consigo acessa-la por aqui. (Na verdade eu não acho é nada, não tenho a menor ideia de porque isso não tá funcionando.)[/quote]Leu o post? Esse erro 'pq vc está usando a sintax de modo errado. Ao utilizar JPQL/HQL não se refere a nada do DB diretamente, mas sim as classes.

Olha, desculpa minha ignorância, mas li tudo e não achei a resposta para a minha duvida.
Esta linha:

esta errada. Mas como deve ser feito então. Como não tenho nenhuma experiencia em Java estou bem perdido cara…

O erro estava mesmo nesta linha:

Foi só modificar a consulta desta maneira que funcionou perfeitamente.
Valeu Hebert Coelho! Seu post é muito completo, já favoritei aqui no browser, pois vou voltar lá algumas vezes até terminar meu brinquedo aqui.

[quote=alanmalbos]O erro estava mesmo nesta linha:

Foi só modificar a consulta desta maneira que funcionou perfeitamente.
Valeu Hebert Coelho! Seu post é muito completo, já favoritei aqui no browser, pois vou voltar lá algumas vezes até terminar meu brinquedo aqui.[/quote]Boa! Eu sabia que você conseguiria. [=