2012-08-07 834 views
0

我正在使用Hibernate進行數據庫訪問。我使用下面的查詢在我的代碼獲取我需要的數據:在下面我用它SQL錯誤:933,SQLState:42000和ORA-00933:SQL命令未正確結束

SELECT proasset 
FROM com.company.claims.participant.AbstractBeneficiary bene 
JOIN bene.approvals approval 
JOIN bene.proassetkey proasset 
join proasset.relatedparties proassetparties 
WHERE approval.user_dt > :currentDate 
AND approval.user_type = :userType 

query

Query q = this.getSessionFactory().getCurrentSession().createSQLQuery(query.toString()) 
q.setDate("currentDate", new Date()); 
q.setString("userType", APPROVER_USER_TYPE); 
List<ProAsset> proassets = q.list(); 

不過,我遇到以下嘗試時運行它:

SQL Error: 933, SQLState: 42000 
ORA-00933: SQL command not properly ended 

如果它的事項,正在使用StringBuilder構造的查詢,它使用\n打破行

對這個問題有什麼想法?

+0

'com.company.claims.participant.AbstractBeneficiary'是表名? – 2012-08-07 18:54:37

回答

4

它看起來像你試圖混合ORM與本機(普通舊SQL)查詢。

createSQLQuery需要原生SQL。您正在使用類而不是表名。試試這個一讀:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html

總之你需要寫這樣的查詢:

select fu 
from bar 
where situation = 'snafu' 

也許你真的想要寫一個namedQuery?他們使用ORM語法來加入實體,就像您在示例中所做的那樣。

檢查這些例子了:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#querysql-namedqueries

0

正確的語法通過消除不適當的條文。可能可以使用另一個SQL語句複製已刪除的子句。例如,要對視圖的行進行排序,請在查詢視圖時執行此操作,而不是在創建視圖時執行。如果連續行縮進,則SQL * Forms應用程序中也會出現此錯誤。檢查縮進的行並刪除這些空格。

0

好的,所以我使用createSQLQuery()而不是createQuery(),而我使用的是列名而不是變量名。

這裏是我的代碼看起來像現在:

StringBuilder query = new StringBuilder(); 

query.append("SELECT proasset\n" + 
      "FROM com.avivausa.claims.participant.AbstractBeneficiary bene\n" + 
      "JOIN bene.approvals approval\n" + 
      "JOIN bene.proAsset proasset\n" + 
      "join proasset.additionalParties proassetparties\n" + 
      "WHERE approval.userDate < current_date()\n"); 
query.append("AND approval.userType = ").append(UserAuditType.APPROVER); 

Query q = this.getSessionFactory().getCurrentSession().createQuery(query.toString()); 

List<ProAsset> proassets = q.list(); 

很顯然,我做了一些重構更改過,但主要的變化是什麼,我上面所述。儘管謝謝你的迴應!

相關問題