首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring batch handle ConstraintViolationException

Spring batch handle ConstraintViolationException
EN

Stack Overflow用户
提问于 2018-02-03 06:43:24
回答 1查看 242关注 0票数 0

我正在使用spring batch导入城市数据。

代码语言:javascript
复制
City{
  String name;
  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
  State state;
}
State{
  String name;
  String code;
}

我已经在fieldSetMapper中填充了所需的数据,在处理器中,我需要设置州和城市之间的关系。

代码语言:javascript
复制
State state;
if ((state = stateDao.findByStateCode(city.getState().getStateCode())) != null) {
  city.setState(state);
} else {
  city.getState().setCountry(country);
}

由于spring batch使用chunk来处理事务,因此如果同一chunk中的多个城市具有相同的状态存储库尚未存储的状态,则会导致唯一约束冲突。

例如,2个城市行

代码语言:javascript
复制
{name:x, state:{name:xx,code:xy}}
{name:y, state:{name:xx,code:xy}}

当spring batch写入第一行时,它将创建一个名为xx、代码为xy的新状态。但是对于第二行,由于该状态已经在数据库中,它将抛出constraintviolationexception。如果抛出异常,有没有办法重新处理第二行?retry()也将回滚第一行。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 10:47:18

我还没有修复这个问题,但我设法避免了这个问题,我一次分块一个项目,而不是10个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48591938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档