2017-02-20 36 views
1

虽然我试图批量更新中的Oracle 11g表中的字段与Jooq 3.9.0,和我越来越日期相关的异常:JOOQ批量更新日期

org.jooq.exception.DataAccessException: SQL [null]; error occurred during batching: ORA-01843: not a valid month 

我们使用Java 8时间类型(javaTimeTypes = true)。伪代码:

List<Query> updates = singletonList(
     jooq.update(TABLE).set(TABLE.FIELD, LocalDateTime.now())); 
jooq.batch(updates).execute(); 

该字段在表中有TIMESTAMP(3)类型。 到目前为止,我已经尝试做非批量更新,例如:

updates.forEach(Query::execute); 

这个工作,但除非绝对必要,我不会牺牲性能。

还试图在Jooq的配置文件中添加一个类型绑定,它在to_timestamp(<Val>, “pattern”)调用中包装了日期字段,这也起作用,但它似乎很脆弱,已经引发了NLS问题并且看起来很丑。如果想知道为什么批处理更新的行为与普通更新相比有所不同,那将会很好。

+0

你能看到工作在日志中生成的SQL? (请注意,我也为此打开了一个问题:https://github.com/jOOQ/jOOQ/issues/5910) –

回答

1

我想你遇到这个问题在这里:#2738,这是固定的3.10,将被整合in 3.9.2

由于您使用与batch(Collection) API静态声明批次批量更新,绑定变量需要被内联,不正确的Java API时间类型的jOOQ 3.9.1

+0

是的,这是我们面临的问题,感谢您的反馈 - 对于延迟感到抱歉。 –