나는 다음과 같은 필드와 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?
어떤 도움을 주신다면 감사하겠습니다 ... 감사합니다 !!!
예 ... 작동했습니다! 감사! – zeus1208