我在使用Sybase(jTDS驱动程序)和某些数据时遇到了SimpleJdbcInsert.executeAndReturnKey
的奇怪问题。使用SimpleJdbcInsert和Sybase检索生成的密钥问题
看看下面的例子:
SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbcTemplate)
.withTableName("TABLE_NAME")
.usingGeneratedKeyColumns("ID");
List<String> columns = new ArrayList<String>();
columns.add("SOME_NUMERIC_DATA");
columns.add("SOME_STRING_DATA");
Map<String, Object> params = new HashMap<String, Object>();
params.put("SOME_NUMERIC_DATA", 10.02);
params.put("SOME_STRING_DATA", "AAAA");
Number insertId = insert.executeAndReturnKey(params);
,好像我做了一个insert.execute(params)
插件将正常工作上面将失败,并
DataIntegrityViolationException: Unable to retrieve the generated key for the insert
插入本身是好的(但我需要生成的列值)。
如果我为SOME_NUMERIC_DATA
列插入null
而不是10.02
,那么它将正常工作并返回生成的列值。此外,如果所有的字段都是VARCHAR
/String
那么它将正常工作。
任何人都可以在这里看到任何可能导致这与字符串和数字字段的组合。
我还要补充一点,当我使用完全相同的代码与H2数据库它的工作原理所有的时间 - 这似乎
您是否验证过Sybase和/或jTDS实际上是否支持生成密钥的检索? – 2014-10-02 19:07:02
它确实支持它 - 如果你坚持的只是字符串,它确实有用。 – extols 2014-10-02 19:58:04