2011-09-13 53 views
1

我在我的問題中使用struts和hibernate。我想下面的查詢在休眠狀態下打開查詢

String hql ="insert into "+ 
     "OPENQUERY(OracleLinkedServer, \'SELECT * FROM  report_access_log\') "+ 
     "(CALLINGHOST, ACCESSTIMESTAMP, HTTPREQUESTMETHOD, ACCESSURL,"+ 
     "HTTPRESPONSECODE, HTTPRESPONSETIMEMILLI, USERNAME, REPORTNAME, ID)"+ 
     " values "+ 
     "(:CALLINGHOST,:ACCESSTIMESTAMP,:HTTPREQUESTMETHOD,:ACCESSURL,:HTTPRESPONSECODE," + 
     ":HTTPRESPONSETIMEMILLI,:USERNAME,:REPORTNAME,"+ 
     "(select * from OPENQUERY(OracleLinkedServer,"+ 
       "\'select SQ_RPT_ACC_LOG_ID.nextval from dual\')))"; 
     Query query=session.createQuery(hql); 
     query.setString("CALLINGHOST", userLogReport.get(0).toString()); 
     query.setDate("ACCESSTIMESTAMP", (Date)userLogReport.get(1)); 
     query.setString("HTTPREQUESTMETHOD", userLogReport.get(2).toString()); 
     query.setString("ACCESSURL", userLogReport.get(3).toString()); 
     query.setString("HTTPRESPONSECODE", userLogReport.get(4).toString()); 
     query.setInteger("HTTPRESPONSETIMEMILLI", (Integer)userLogReport.get(5)); 
     query.setString("USERNAME", userLogReport.get(6).toString()); 
     query.setString("REPORTNAME", userLogReport.get(7).toString()); 

印在控制檯上的查詢如下

insert into OPENQUERY(OracleLinkedServer, 'SELECT * FROM report_access_log')  
(CALLINGHOST, ACCESSTIMESTAMP, HTTPREQUESTMETHOD, ACCESSURL,HTTPRESPONSECODE, 
HTTPRESPONSETIMEMILLI, USERNAME, REPORTNAME, ID) values 
(:CALLINGHOST,:ACCESSTIMESTAMP,:HTTPREQUESTMETHOD,:ACCESSURL,:HTTPRESPONSECODE:HTTPRESPONSE 
TIMEMILLI,:USERNAME,:REPORTNAME,(select * from OPENQUERY(OracleLinkedServer,'select 
SQ_RPT_ACC_LOG_ID.nextval from dual'))) 

我會在列79號是(CALLINGHOST,查詢語法異常......

但是,當我在SQL運行查詢是越來越執行的時候。查詢是如下

insert into OPENQUERY(OracleLinkedServer, 'SELECT * FROM report_access_log') 
(CALLINGHOST, ACCESSTIMESTAMP, HTTPREQUESTMETHOD, ACCESSURL,HTTPRESPONSECODE, 
HTTPRESPONSETIMEMILLI, USERNAME, REPORTNAME, ID) values 
('10.87.192.246','GET','/cci/bby/ImageViewer/viewImages.action','200',6,'su','Insert 
Review',(select * from OPENQUERY(OracleLinkedServer,'select SQ_RPT_ACC_LOG_ID.nextval 
from dual'))) 

請發解決問題併爲我提供從Java執行它的解決方案。 在此先感謝。

回答

1

HQL和SQL是兩種不同的語言。 HQL處理Hibernate實體,它們的屬性以及它們之間的關聯。 SQL適用於數據庫表和列。

使用

Query query = session.createSQLQuery(sql); 

而不是

Query query = session.createQuery(hql); 
+0

感謝JB ......監督在我身邊...... :-) – rozar

+0

哎呀..我有一個另一個問題。我用session.createSQLQuery(),現在得到以下org.hibernate.exception.SQLGrammarException:無法執行本機批量操作查詢 我GOOGLE了一下,並知道我們必須使用session.createQuery()。任何可能的方案? 首先我非常感謝你的努力JB。 – rozar

+0

在其他問題中發佈您的查詢,用於執行它的Java代碼以及異常堆棧跟蹤。 –