我有一个代码如下:
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语句文本,看起来像'更新客户集名称=?'
我可以使用hibernate会话以某种方式确定它吗?它是否存储了它试图保存的最后一个实体的信息?