Hibernate批量更新:需要知道失败的语句

时间:2013-09-12 16:21:31

标签: java sql hibernate batch-processing

我有一个代码如下:

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会话以某种方式确定它吗?它是否存储了它试图保存的最后一个实体的信息?

0 个答案:

没有答案