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
e trava o resto da execução do programa, trava mesmo o systema que estou desenvolvendo
B
breno500as
Poste tbm as entidades que participam do seu select(ListaMaterial e Turma)…Sua entidade Turma esta mapeada com @Entity ?
edilsonon
esta a entidade Turma
packageSysEscolar.entidade;importjava.io.Serializable;importjava.util.Date;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;importjavax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.Table;importjavax.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")})publicclassTurmasimplementsSerializable{@Id@Column(name="Turma",nullable=false,length=15)privateStringTurma;@Column(name="Nivel",nullable=false,length=30)privateStringNivel;@Column(name="Vagas",nullable=false)privateFloatVagas;@Column(name="AnoLetivo",nullable=false)privateFloatAnoLetivo;@Column(name="dtinclusao",nullable=false)@Temporal(javax.persistence.TemporalType.DATE)privateDatedtinclusao;@Column(name="usuarioinc",nullable=false,length=30)privateStringusuarioinc;@Column(name="dtalteracao")@Temporal(javax.persistence.TemporalType.DATE)privateDatedtalteracao;@Column(name="usuarioalt",length=30)privateStringusuarioalt;publicStringgetTurma(){returnTurma;}publicvoidsetTurma(StringTurma){this.Turma=Turma;}publicStringgetNivel(){returnNivel;}publicvoidsetNivel(StringNivel){this.Nivel=Nivel;}publicFloatgetVagas(){returnVagas;}publicvoidsetVagas(FloatVagas){this.Vagas=Vagas;}publicDategetDtinclusao(){returndtinclusao;}publicvoidsetDtinclusao(Datedtinclusao){this.dtinclusao=dtinclusao;}publicStringgetUsuarioinc(){returnusuarioinc;}publicvoidsetUsuarioinc(Stringusuarioinc){this.usuarioinc=usuarioinc;}publicDategetDtalteracao(){returndtalteracao;}publicvoidsetDtalteracao(Datedtalteracao){this.dtalteracao=dtalteracao;}publicStringgetUsuarioalt(){returnusuarioalt;}publicvoidsetUsuarioalt(Stringusuarioalt){this.usuarioalt=usuarioalt;}@OverridepublicStringtoString(){returnthis.Turma;}@Overridepublicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(getClass()!=obj.getClass()){returnfalse;}finalTurmasother=(Turmas)obj;if((this.Turma==null)?(other.Turma!=null):!this.Turma.equals(other.Turma)){returnfalse;}returntrue;}@OverridepublicinthashCode(){inthash=3;hash=89*hash+(this.Turma!=null?this.Turma.hashCode():0);returnhash;}publicFloatgetAnoLetivo(){returnAnoLetivo;}publicvoidsetAnoLetivo(FloatAnoLetivo){this.AnoLetivo=AnoLetivo;}}
e esta é a ListaMaterial
packageSysEscolar.entidade;importjava.io.Serializable;importjava.util.Date;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.SequenceGenerator;importjavax.persistence.Table;importjavax.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")})publicclassListaMaterialimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="GEN_LISTAS")@SequenceGenerator(name="GEN_LISTAS",sequenceName="GEN_LISTAS_ID",allocationSize=1)@Column(name="Id",nullable=false)privateintId;@Column(name="Turma",nullable=false,length=15)privateStringTurma;@Column(name="Nivel",nullable=false,length=25)privateStringNivel;@Column(name="Material",nullable=false,length=60)privateStringMaterial;@Column(name="Qtde",nullable=false)privateFloatQtde;@Column(name="dtinclusao",nullable=false)@Temporal(javax.persistence.TemporalType.DATE)privateDatedtinclusao;@Column(name="usuarioinc",nullable=false,length=30)privateStringusuarioinc;@Column(name="dtalteracao")@Temporal(javax.persistence.TemporalType.DATE)privateDatedtalteracao;@Column(name="usuarioalt",length=30)privateStringusuarioalt;publicintgetId(){returnId;}publicvoidsetId(intId){this.Id=Id;}publicStringgetTurma(){returnTurma;}publicvoidsetTurma(StringTurma){this.Turma=Turma;}publicStringgetNivel(){returnNivel;}publicvoidsetNivel(StringNivel){this.Nivel=Nivel;}publicStringgetMaterial(){returnMaterial;}publicvoidsetMaterial(StringMaterial){this.Material=Material;}publicFloatgetQtde(){returnQtde;}publicvoidsetQtde(FloatQtde){this.Qtde=Qtde;}publicDategetDtinclusao(){returndtinclusao;}publicvoidsetDtinclusao(Datedtinclusao){this.dtinclusao=dtinclusao;}publicStringgetUsuarioinc(){returnusuarioinc;}publicvoidsetUsuarioinc(Stringusuarioinc){this.usuarioinc=usuarioinc;}publicDategetDtalteracao(){returndtalteracao;}publicvoidsetDtalteracao(Datedtalteracao){this.dtalteracao=dtalteracao;}publicStringgetUsuarioalt(){returnusuarioalt;}publicvoidsetUsuarioalt(Stringusuarioalt){this.usuarioalt=usuarioalt;}@OverridepublicStringtoString(){returnthis.Material;}@Overridepublicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(getClass()!=obj.getClass()){returnfalse;}finalListaMaterialother=(ListaMaterial)obj;if(this.Id!=other.Id){returnfalse;}returntrue;}@OverridepublicinthashCode(){inthash=7;hash=37*hash+this.Id;returnhash;}}
veja como é possivel me ajudar a resolver isso.
B
breno500as
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