我有一个看起来像这样的代码:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
try {
for ( Customer customer: customers ) {
i++;
session.update(customer);
if ( i % 200 == 0 ) { //200, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
} catch (Exc e) {
//TODO want to know customer id here!
}
tx.commit();
session.close();
比如说,在某些时候 session.flush() 引发了一个 DataException,因为其中一个字段没有映射到数据库列大小,这批 200 个客户之一。没有问题,数据可能被破坏,在这种情况下没关系。但是,我真的需要知道失败的客户 ID。数据库返回无意义的错误消息,没有说明语句的参数是什么等。捕获的异常也不包含哪个客户确实失败了,只有 sql 语句文本,看起来像'update Customer set name=?'
我可以使用休眠会话以某种方式确定它吗?它是否将有关它试图保存的最后一个实体的信息存储在某个地方?