我正在使用spring batch导入城市数据。
City{
String name;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
State state;
}
State{
String name;
String code;
}我已经在fieldSetMapper中填充了所需的数据,在处理器中,我需要设置州和城市之间的关系。
State state;
if ((state = stateDao.findByStateCode(city.getState().getStateCode())) != null) {
city.setState(state);
} else {
city.getState().setCountry(country);
}由于spring batch使用chunk来处理事务,因此如果同一chunk中的多个城市具有相同的状态存储库尚未存储的状态,则会导致唯一约束冲突。
例如,2个城市行
{name:x, state:{name:xx,code:xy}}
{name:y, state:{name:xx,code:xy}}当spring batch写入第一行时,它将创建一个名为xx、代码为xy的新状态。但是对于第二行,由于该状态已经在数据库中,它将抛出constraintviolationexception。如果抛出异常,有没有办法重新处理第二行?retry()也将回滚第一行。
谢谢。
发布于 2018-03-02 10:47:18
我还没有修复这个问题,但我设法避免了这个问题,我一次分块一个项目,而不是10个。
https://stackoverflow.com/questions/48591938
复制相似问题