2013-08-05 2 views
0

나는 다음과 같은 필드와 VO이 -스프링 배치와 최대 절전 모드 - 선택 SCOPE_IDENTITY()를 삽입 쿼리 후 추가

HD_REC_ID 
REC_TYP_CD 
SRC_SYS_NM 
SRC_TYP_CD 
RCV_SYS_CD 
JOB_STTS_CD 
IDX_FILE_NM 
IDX_FILE_LOC_TXT 
XTRCT_DT 
XTRCT_TM 
DTL_REC_CNT 
ATCH_CNT 
ERR_MSG_TXT 
PROC_MODE_CD 
INVLD_HD_REC_TXT 
CRT_TS 

주석은 사용됩니다 -이 첫 번째와 마지막의

@Id 
@Column(name = EntityConstants.HD_REC_ID) 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int headerId; 

@Generated(value = GenerationTime.INSERT) 
@Column(name = EntityConstants.CRT_TS) 
@Temporal(TemporalType.TIMESTAMP) 
private Date creationTime; 

필드 (HD_REC_ID 및 CRT_TS)는 자동 생성됩니다. 값을 DB에 삽입하는 동안 콘솔 (편집 콘솔)에 표시됩니다.

[8/5/13 15:22:12:666 IST] 00000063 SystemOut  O Hibernate: insert into T_HD_REC (ATCH_CNT, ERR_MSG_TXT, XTRCT_DT, XTRCT_TM, IDX_FILE_LOC_TXT, IDX_FILE_NM, INVLD_HD_REC_TXT, JOB_STTS_CD, PROC_MODE_CD, DTL_REC_CNT, REC_TYP_CD, RCV_SYS_CD, SRC_SYS_NM, SRC_TYP_CD) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) select scope_identity() 
[8/5/13 15:22:13:046 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:100) 2013-08-05 15:22:13,045 -- WARN -- SQL Error: -199, SQLState: 42601 
[8/5/13 15:22:13:047 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:101) 2013-08-05 15:22:13,046 -- ERROR -- DB2 SQL error: SQLCODE: -199, SQLSTATE: 42601, SQLERRMC: SELECT;;FOR <END-OF-STATEMENT> NOT ATOMIC 
[8/5/13 15:22:13:047 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:100) 2013-08-05 15:22:13,047 -- WARN -- SQL Error: -516, SQLState: 26501 
[8/5/13 15:22:13:048 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:101) 2013-08-05 15:22:13,047 -- ERROR -- DB2 SQL error: SQLCODE: -516, SQLSTATE: 26501, SQLERRMC: null 
[8/5/13 15:22:13:048 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:100) 2013-08-05 15:22:13,048 -- WARN -- SQL Error: -518, SQLState: 07003 
[8/5/13 15:22:13:049 IST] 00000063 SystemOut  O (JDBCExceptionReporter.java:101) 2013-08-05 15:22:13,048 -- ERROR -- DB2 SQL error: SQLCODE: -518, SQLSTATE: 07003, SQLERRMC: null 


com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -199, SQLSTATE: 42601, SQLERRMC: SELECT;;FOR <END-OF-STATEMENT> NOT ATOMIC 

여기에 SQL 오류 코드에 대한 최대 읽기 - stmt를 select scope_identity()가 선행하는 세미콜론없이 추가됩니다 때문입니다 http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z9.doc.codes%2Fsrc%2Ftpc%2Fn199.htm

-518 
THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT 
-516 
THE DESCRIBE STATEMENT DOES NOT SPECIFY A PREPARED STATEMENT 
-199 
ILLEGAL USE OF KEYWORD keyword. TOKEN token-list WAS EXPECTED 

, 내가 이해에서. 그러나 나는 이것을 어디에도 부르지 않을 것이다. 이 오류는 SQL 서버에서 작성한 POC를 DB2 9의 DBA 작성 데이터베이스로 이동하는 동안 발생합니다. 이는 SQL 서버에서 완벽하게 작동합니다. 응용 프로그램이 SQL Server에있는 동안 INSERT stmt 로그 이후에 추가 된 select scope_identity()이 없었습니다.

나는 Hibernate와 Spring (Batch)에 매우 익숙하다. 죄송합니다. 바보 같은 소리가 나면 ...하지만 놀랍게도이 유형의 항목은 인터넷에서 찾지 못했습니다. 이 링크를 확인한 후 Identities에 대한 아이디어가 있습니다. What is the difference between Scope_Identity(), Identity(), @@Identity, and Ident_Current?

어떤 도움을 주신다면 감사하겠습니다 ... 감사합니다 !!!

답변

0

SQLServerDialect에서 DBDialect으로 방언을 변경 했습니까? select scope_identity() cames에서 SQLServerDialect.appendIdentitySelectToInsert()

+0

예 ... 작동했습니다! 감사! – zeus1208