【发布时间】:2012-06-25 10:15:13
【问题描述】:
我正在编写一个程序来对数十万个相关类型的实体运行批处理。我最初是通过每个持久化的单个事务来执行此操作的。这看起来很慢,所以我尝试按照http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html 中描述的方式进行一些幼稚的批量更新,使用更长的事务和偶尔的刷新+清除。我的某些实体类型遇到了 ConstraintViolationException,因为我有唯一的字段约束。但是,我不确定如何检查现有实例;我目前有一个列出冲突的标准,但它似乎没有返回我在同一事务中保存或更新的实体。
一个虚构的例子可能会有所帮助:
实体 家庭、人、姓名
家庭有很多人(一对多)
人有很多名字,不同的人可以有相同的名字。 (多对多)
我的更新包括保留一个家庭及其人员和名称,但我不确定如何对名称进行重复数据删除(可能与数据库中的现有名称或同一更新批次中的另一个名称冲突)。我可以在休眠之外跟踪新实体的唯一约束字段,但我认为这可能没有必要。是否有任何内置方法可以检查数据库中的重复项和未提交的更改?我看到了Hibernate batch updates with constraintviolationexception,但我不喜欢在正常代码路径中使用异常。谢谢,我感谢任何指导。
【问题讨论】:
标签: hibernate batch-processing