2012-06-27 102 views
3

我使用的Eclipse靛藍和時遇到「JPA驗證問題」。Eclipse的靛藍 - JPA驗證問題

我命名查詢是:

from Person p where p.name = :name 

並有此錯誤:

The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM. 

但它是一個有效的JPQL查詢。有人知道我可以如何消除這個錯誤?

如果我改變我的查詢

select p from Person p where p.name = :name 

沒有更多的錯誤,但我不想改變我的所有查詢。

感謝

MP5

回答

1

它看起來對我來說,這是形式的任何疑問:

from Person p where p.name = :name 

不是真正意義上有效的JPQL。根據在語言參考:

http://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html

每個語句需要具有任FROM部分之前的SELECTUPDATEDELETE語句。

下面是更多的例子:

http://en.wikipedia.org/wiki/Java_Persistence_Query_Language

不幸的是,它看起來像你需要更新所有的查詢,使他們適應這種格式。

1

而事實上這不是一個有效的JPQL查詢。 JPQL以「SELECT」,「UPDATE」或「DELETE」開頭。

很明顯,這可以在休眠(即HQL)工作,但查詢是不標準,不便於攜帶。所以,如果你不想改變你的疑問,那麼你沒有使用JPA和您的應用程序是不可移植的。

JPA規範將證實這一點。

1

這不是一個有效的JPQL查詢。這是一個有效的HQL查詢,但HQL不是JPQL。 JPQL查詢必須有一個select子句。

這裏有一個JPQL條款的BNF語法,從規格:

select_statement :: = select_clause from_clause [where_clause] [groupby_clause [having_clause] [orderby_clause] 
8

如果你不關心可移植性,您可以關閉已添加到大理的靛藍釋放JPQL驗證。如果您選擇了Hibernate平臺的JPA項目,您仍然可以獲得Hibernate Tools對JPQL/HQL的任何驗證。

轉到「查詢和生成器」下的工作空間首選項'Java持久性' - > JPA->錯誤/警告'並將'無效或不完整的JPQL查詢'更改爲'忽略'。如果您希望他們擴展Hibernate平臺的Dali JPQL驗證,或者只是默認將其關閉,您可以針對Hibernate工具輸入一個錯誤。