2

我有一个看起来像这样的代码:

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=?'

我可以使用休眠会话以某种方式确定它吗?它是否将有关它试图保存的最后一个实体的信息存储在某个地方?

4

0 回答 0