Duvida de JPA+firebird

Olá Galera…;

Estou tentando fazer uma select entre duas tabelas, e não estou conseguindo essa conexão.
Tem alguem que pode me ajudar a fazer essa consulta,
por exemplo (select a.id as numero_venda, a.qtde, b.descriao from vendas a, produtos b where a.prod=b.id order by a.id),
gostaria de fazer uma consulta deste tipo no netbeans+JPA.
Pq no IBExpert+FireBird eu faço essa consulta no banco de dados sem erros e rapidamente,
e dentro do NetBeans+JPA essa consulta dá erro!!!
há eu estou usando @NamedQuery na classe de entidade para consulta

Oi edilsonon,

Poste o erro que está dando para o pessoal poder te ajudar melhor…

breno500as,

o error que aparece é o seguinte:

SEVERE: Error in named query: ListasMaterial
org.hibernate.hql.ast.QuerySyntaxException: Turma is not mapped [Select l, m from SysEscolar.entidade.ListaMaterial l, Turma m where l.Turma=m.Turma and Turma = :tur order by Material]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:402)
at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:352)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

e trava o resto da execução do programa, trava mesmo o systema que estou desenvolvendo

Poste tbm as entidades que participam do seu select(ListaMaterial e Turma)…Sua entidade Turma esta mapeada com @Entity ?

esta a entidade Turma

[code]package SysEscolar.entidade;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
*

  • @author Edilson
    */
    @Entity
    @Table(name=“Turmas”)
    @NamedQueries({
    @NamedQuery(name=“ListaTurmas”, query=“Select lt from Turmas lt where lt.AnoLetivo = :ano order by Turma”),
    @NamedQuery(name=“ListalmTurma”, query=“Select lm from Turmas lm where lm.AnoLetivo = :ano order by Turma”)
    })
    public class Turmas implements Serializable {

    @Id

    @Column(name=“Turma”, nullable=false, length=15)
    private String Turma;
    @Column(name=“Nivel”, nullable=false, length=30)
    private String Nivel;
    @Column(name=“Vagas”, nullable=false)
    private Float Vagas;
    @Column(name=“AnoLetivo”, nullable=false)
    private Float AnoLetivo;
    @Column(name=“dtinclusao”, nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtinclusao;
    @Column(name=“usuarioinc”, nullable=false, length=30)
    private String usuarioinc;
    @Column(name=“dtalteracao”)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtalteracao;
    @Column(name=“usuarioalt”, length=30)
    private String usuarioalt;

    public String getTurma() {
    return Turma;
    }

    public void setTurma(String Turma) {
    this.Turma = Turma;
    }

    public String getNivel() {
    return Nivel;
    }

    public void setNivel(String Nivel) {
    this.Nivel = Nivel;
    }

    public Float getVagas() {
    return Vagas;
    }

    public void setVagas(Float Vagas) {
    this.Vagas = Vagas;
    }

    public Date getDtinclusao() {
    return dtinclusao;
    }

    public void setDtinclusao(Date dtinclusao) {
    this.dtinclusao = dtinclusao;
    }

    public String getUsuarioinc() {
    return usuarioinc;
    }

    public void setUsuarioinc(String usuarioinc) {
    this.usuarioinc = usuarioinc;
    }

    public Date getDtalteracao() {
    return dtalteracao;
    }

    public void setDtalteracao(Date dtalteracao) {
    this.dtalteracao = dtalteracao;
    }

    public String getUsuarioalt() {
    return usuarioalt;
    }

    public void setUsuarioalt(String usuarioalt) {
    this.usuarioalt = usuarioalt;
    }

    @Override
    public String toString() {
    return this.Turma;
    }

    @Override
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }
    if (getClass() != obj.getClass()) {
    return false;
    }
    final Turmas other = (Turmas) obj;
    if ((this.Turma == null) ? (other.Turma != null) : !this.Turma.equals(other.Turma)) {
    return false;
    }
    return true;
    }

    @Override
    public int hashCode() {
    int hash = 3;
    hash = 89 * hash + (this.Turma != null ? this.Turma.hashCode() : 0);
    return hash;
    }

    public Float getAnoLetivo() {
    return AnoLetivo;
    }

    public void setAnoLetivo(Float AnoLetivo) {
    this.AnoLetivo = AnoLetivo;
    }

}[/code]
e esta é a ListaMaterial

[code]package SysEscolar.entidade;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
*

  • @author Edilson
    */
    @Entity
    @Table(name=“ListaMaterial”)
    @NamedQueries({
    @NamedQuery(name=“ListLMaterial”, query=“Select lm from ListaMaterial lm order by Turma”),
    @NamedQuery(name=“ListasMaterial”, query=“Select l, m from ListaMaterial l, Turma m where l.Turma=m.Turma and Turma = :tur order by Material”)
    })
    public class ListaMaterial implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator=“GEN_LISTAS”)
    @SequenceGenerator(name=“GEN_LISTAS”, sequenceName=“GEN_LISTAS_ID”, allocationSize=1)

    @Column(name=“Id”, nullable=false)
    private int Id;
    @Column(name=“Turma”, nullable=false, length=15)
    private String Turma;
    @Column(name=“Nivel”, nullable=false, length=25)
    private String Nivel;
    @Column(name=“Material”, nullable=false, length=60)
    private String Material;
    @Column(name=“Qtde”, nullable=false)
    private Float Qtde;
    @Column(name=“dtinclusao”, nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtinclusao;
    @Column(name=“usuarioinc”, nullable=false, length=30)
    private String usuarioinc;
    @Column(name=“dtalteracao”)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtalteracao;
    @Column(name=“usuarioalt”, length=30)
    private String usuarioalt;

    public int getId() {
    return Id;
    }

    public void setId(int Id) {
    this.Id = Id;
    }

    public String getTurma() {
    return Turma;
    }

    public void setTurma(String Turma) {
    this.Turma = Turma;
    }

    public String getNivel() {
    return Nivel;
    }

    public void setNivel(String Nivel) {
    this.Nivel = Nivel;
    }

    public String getMaterial() {
    return Material;
    }

    public void setMaterial(String Material) {
    this.Material = Material;
    }

    public Float getQtde() {
    return Qtde;
    }

    public void setQtde(Float Qtde) {
    this.Qtde = Qtde;
    }

    public Date getDtinclusao() {
    return dtinclusao;
    }

    public void setDtinclusao(Date dtinclusao) {
    this.dtinclusao = dtinclusao;
    }

    public String getUsuarioinc() {
    return usuarioinc;
    }

    public void setUsuarioinc(String usuarioinc) {
    this.usuarioinc = usuarioinc;
    }

    public Date getDtalteracao() {
    return dtalteracao;
    }

    public void setDtalteracao(Date dtalteracao) {
    this.dtalteracao = dtalteracao;
    }

    public String getUsuarioalt() {
    return usuarioalt;
    }

    public void setUsuarioalt(String usuarioalt) {
    this.usuarioalt = usuarioalt;
    }

    @Override
    public String toString() {
    return this.Material;
    }

    @Override
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }
    if (getClass() != obj.getClass()) {
    return false;
    }
    final ListaMaterial other = (ListaMaterial) obj;
    if (this.Id != other.Id) {
    return false;
    }
    return true;
    }

    @Override
    public int hashCode() {
    int hash = 7;
    hash = 37 * hash + this.Id;
    return hash;
    }

}[/code]
veja como é possivel me ajudar a resolver isso.

Bom, vendo suas entidades ficou um pouco mais claro,vou mudar um pouquinhho sua query, faria algo do tipo

@NamedQuery(name="minhaQuery", query="select materiais from ListaMaterial materiais where materiais.turma = :tur order by materiais.material") 

Agora se vc quiser fazer um relacionamento entre a entidade ListaMaterial e a entidade Turmas é necessário utilizar uma das anotações que a JPA disponibiliza para isso(@OneToOne,@ManyToOne etc…) e vc deve utilizar @JoinColumn ao invés de @Column, ou seja vc terá que dar uma alterada nas anotações da sua entidade ListaMaterial para fazer novamente sua JPQL…

Espero ter ajudado…

PS: Quando vc for postar um código no GUJ coloque dentro de uma tag [code]

ok, vou testar,

mais mesmo assim me responda uma coisa tem como colocar um comando SQL puro dentro de uma JPA

obrigado, até o momento

Tem sim… Vc pode fazer:

Query query = entityManager.createNativeQuery("seu sql");
query.executeUpdate();

valeu obrigado!