0

我有一个带有以下字段的 VO -

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)是自动生成的。在将值插入数据库时​​,这就是我在控制台(编辑控制台)上得到的。

[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 错误代码的信息 - 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

据我了解,这是因为select scope_identity()附加了 stmt 而没有前面的分号。但我不会在任何地方调用它。当我将我们在 SQL Server 上创建的 POC 移动到 DB2 9 上的 DBA 创建的数据库时,会发生此错误。这在 SQL Server 上运行良好。select scope_identity()当应用程序在 SQL Server 上时,插入 stmt 日志后没有附加。

我对 Hibernate 和 Spring(Batch) 都很陌生。对不起,如果这对你来说听起来很傻......但令人惊讶的是,我在网上没有找到任何这种类型的东西......我检查了这个链接并了解了身份。 Scope_Identity()、Identity()、@@Identity 和 Ident_Current 有什么区别?

任何帮助将不胜感激......谢谢!

4

1 回答 1

0

您是否将方言从 更改SQLServerDialectDBDialectselect scope_identity()来自SQLServerDialect.appendIdentitySelectToInsert()

于 2013-08-06T14:32:19.570 回答