Problema em query EJB-QL [RESOLVIDO APÓS ANOS]  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
djemacao
GUJ Master

Membro desde: 04/06/2007 17:47:24
Mensagens: 1030
Offline

Olá pessoal,

Estou com um problema um tanto quanto estranho aqui.
Estou utilizando JPA para criar queries com o provider do Hibernate, mas por motivos de mudança no projeto, tive que mudar para a nhaca do TopLink. Ocorre que a query que fiz, e funciona perfeitamente com o Hibernate:


Não funciona nem a paulada no TopLInk. Ele acusa problema no sinal de multiplicação, como vocês podem ver abaixo:

expecting RIGHT_ROUND_BRACKET, found '*'


Ocorre que não acho "googlando" quem tenha esse erro. E todos os tutoriais e livros que vi, não possuem informações sobre tal situação. Então me resta saber por vocês se alguém aqui já passou por isso.

Obrigado pela ajuda quem puder.

Abraços

This message was edited 1 time. Last update was at 22/01/2010 00:49:02


"Quanto mais aprendo mais tenho consciência que nada sei."
brunotonet
Thread.start()

Membro desde: 06/04/2007 11:32:41
Mensagens: 26
Offline

Gostaria de saber se vc resolveu esse problema ou voltaram para o hibernate
Muito obrigado.

This message was edited 2 times. Last update was at 02/11/2007 21:14:11

[Email]
djemacao
GUJ Master

Membro desde: 04/06/2007 17:47:24
Mensagens: 1030
Offline

brunotonet wrote:Gostaria de saber se vc resolveu esse problema ou voltaram para o hibernate
Muito obrigado.


Voltamos para o Hibernate, correndo. Realmente nem achamos como resolver e o pessoal do TopLink também não respondeu a nossa pergunta.
No hibernate funciona perfeitamente.

abraços

"Quanto mais aprendo mais tenho consciência que nada sei."
djemacao
GUJ Master

Membro desde: 04/06/2007 17:47:24
Mensagens: 1030
Offline

Vivendo e aprendendo. Hoje, batendo um papo com o Edson Gonçalves cai nesta questão do que não havia gostado no TopLink e este problema que enfrentei logo no início e eis que ele me mostra como funcionava:
http://www.oracle.com/technology/pub/articles/vasiliev-jpql.html

O tópico deste link que ensina como resolver a questão é Defining JPQL Joins, onde cito a resolução:
Unfortunately, the SUM function used in JPQL does not allow you to pass an arithmetic expression as the argument. What this means in practice is that you won't be able to pass p.price*l.quantity as the argument to the JPQL's SUM. However, there are ways to work around this issue. In the following example, you define class LineItemSum whose constructor is then used in the select list of the query, taking p.price and l.quantity as the parameters. What the LineItemSum constructor does is multiply p.price by l.quantity, saving the result to its rslt class variable. Next, you can iterate through the LineItemSum list retrieved by the query, summing the values of the LineItemSum's rslt variable. The following snippet shows how all this can be implemented in code:




Eu poderia nem dar o crédito ao cara, mas ele é o CARA. Ficou pendente aqui e acho que muita gente pulou fora, como eu, do TopLink, que considerava com um desempenho melhor que o do Hibernate na época, por causa de um detalhe desses. Mas cá entre nós, ohh falha feia essa da JPA.

"Quanto mais aprendo mais tenho consciência que nada sei."
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team