我有一个使用批处理的spring-boot项目。读取工作正常(我从CSV文件中读取)并且映射到我的POJO也可以工作(也插入到数据库中,但不是更新...)。
但问题出现了:
我使用JpaItemWriter
和具有自动生成ID(long
值)的实体。当我没有在Bean中设置Id时,它将是一个带有下一个值的插入(这样就可以了)。
但问题是,有时我不需要插入,而是需要更新。当我将Id设置为与数据库中的现有条目相同的Id(H2 - 保存到文件中)时,它会生成另一个Insert,或者我发现主键违规。
我还在Entity类中尝试了@DynamicUpdate(true)
和@SelectBeforeUpdate(true)
,但它不起作用。
长Id键也有@Id
声明。
如何在PersistenceContext
?
ItemReader
读取POJO,MyProcessor
将POJO转换为Bean(其中包含更多字段,仅在数据库中,而不在CSV文件中)并返回{{1}如果没有做任何事情或Bean(没有Id设置=插入,或者旧的Id =我希望是更新)。
null
和equals()
方法仅指ID。
答案 0 :(得分:0)
解决方案:我必须从DB / Repo本身返回Item(Bean),而不是具有相同Id的新创建的。
然后我得到更新。