Duvida de JPA+firebird

8 respostas
edilsonon

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

8 Respostas

B

Oi edilsonon,

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

edilsonon

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

B

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

edilsonon

esta a entidade Turma

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;
    }

    
}
e esta é a ListaMaterial
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;
    }

}
veja como é possivel me ajudar a resolver isso.
B

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]

edilsonon

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

B

Tem sim… Vc pode fazer:

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

valeu obrigado!

Criado 28 de janeiro de 2010
Ultima resposta 31 de jan. de 2010
Respostas 8
Participantes 2