2011-09-13 3 views
1

나는 내 문제에서 스트럿츠와 동면 모드를 사용 중이다. I는 다음의 질의를 시도최대 절전 모드에서 열린 쿼리

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'))) 

내가 열 (CALLINGHOST이다 없음 79에서 검색어 구문 예외가 다음과 같이 콘솔에 인쇄 쿼리 ...이다

하지만 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 : 네이티브 대량 조작 쿼리를 실행할 수 없습니다. 나는 봤는데 우리가 session.createQuery()를 사용해야한다는 것을 알게되었습니다. 가능한 모든 솔루션 ??? 우선 JB의 노력에 감사드립니다. – rozar

+0

쿼리, 해당 쿼리를 실행하는 데 사용 된 Java 코드 및 예외 스택 추적을 다른 질문에 게시하십시오. –