Executar uma Query JPA

3 respostas
M

Olá pessoal!!

Estou com o seguinte problema estou desenvolvendo uma aplicação utilizando JPA utilizando o ToopLink entao estou tentando executar uma Query assim

List vendas = em.createQuery("select a from Vendaproduto a  join Hospedagem h  on h.hospedagem_id = a.hospedagem_id").getResultList();

porem executando esse comando tenho o seguinte exception, se alguem puder me ajudar agradeço

abraço

init:

deps-jar:

Compiling 1 source file to D:\UNIPAR\Hotel\build\classes

compile:

run:

[TopLink Info]: 2009.01.03 11:10:24.704ServerSession(22355808)TopLink, version: Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))

[TopLink Info]: 2009.01.03 11:10:26.450ServerSession(22355808)file:/D:/UNIPAR/Hotel/build/classes/-Hotel login successful

Exception in thread AWT-EventQueue-0 java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager

at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:209)

at ClassesVisuais.ConsumoDao.buscarConsumo(ConsumoDao.java:30)

at ClassesVisuais.Hospedagem.(Hospedagem.java:39)

at ClassesVisuais.BuscarHospedagem.jButton2ActionPerformed(BuscarHospedagem.java:161)

at ClassesVisuais.BuscarHospedagem.access$100(BuscarHospedagem.java:23)

at ClassesVisuais.BuscarHospedagem$3.actionPerformed(BuscarHospedagem.java:87)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)

at java.awt.Component.processMouseEvent(Component.java:6099)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3287)

at java.awt.Component.processEvent(Component.java:5864)

at java.awt.Container.processEvent(Container.java:2109)

at java.awt.Component.dispatchEventImpl(Component.java:4460)

at java.awt.Container.dispatchEventImpl(Container.java:2167)

at java.awt.Component.dispatchEvent(Component.java:4286)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4465)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4129)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4059)

at java.awt.Container.dispatchEventImpl(Container.java:2153)

at java.awt.Window.dispatchEventImpl(Window.java:2554)

at java.awt.Component.dispatchEvent(Component.java:4286)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Caused by: Exception [TOPLINK-8024] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.EJBQLException

Exception Description: Syntax error parsing the query [select a from Vendaproduto a  join Hospedagem h  on h.hospedagem_id = a.hospedagem_id ], line 1, column 47: syntax error at [h].

Internal Exception: line 1:47: expecting DOT, found h

at oracle.toplink.essentials.exceptions.EJBQLException.syntaxErrorAt(EJBQLException.java:379)

at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.handleANTLRException(EJBQLParser.java:335)

at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.addError(EJBQLParser.java:278)

at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.reportError(EJBQLParser.java:378)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.joinAssociationPathExpression(EJBQLParser.java:1909)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.join(EJBQLParser.java:1768)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.identificationVariableDeclaration(EJBQLParser.java:1629)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.fromClause(EJBQLParser.java:454)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.selectStatement(EJBQLParser.java:179)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.document(EJBQLParser.java:135)

at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.parse(EJBQLParser.java:166)

at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.buildParseTree(EJBQLParser.java:127)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:215)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:189)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:153)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:114)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:99)

at oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.(EJBQueryImpl.java:86)

at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:204)

 30 more

Caused by: line 1:47: expecting DOT, found h

at persistence.antlr.Parser.match(Parser.java:212)

at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.joinAssociationPathExpression(EJBQLParser.java:1901)

 44 more

CONSTRUÍDO COM SUCESSO (tempo total: 23 segundos)

3 Respostas

doug

Olá
Se vc ao inves de usar join, fazer a pk de um igual a fk do outro… acho que funciona
to suspeitando deste join… srrsrsrs não sei não gosto de join!! srrsrsr

Mas tenta fazer um teste… pk = fk…

Espero ter ajudado
Flwssss

ale-asilva

Carinha seguinte.
Para fazer este tipo de associação pelo que entendi até agora, no JPA.
Você deve criar relacionamentos entre as suas entidades.
Através das anotações @oneToMany e @ManyToOne.
Neste artigo você vai encontrar uma explicação de como fazer isto
http://www.devmedia.com.br/articles/viewcomp.asp?comp=6539
Já aqui tem um exemplo de como fazer e executar joins.
http://www.oracle.com/technology/pub/articles/vasiliev-jpql.html

Boa sorte.

M

Valeu pessoal pela ajuda com isso consegui fazer o que eu precisava

obrigado

Criado 3 de janeiro de 2009
Ultima resposta 6 de jan. de 2009
Respostas 3
Participantes 3