2015-02-07 98 views
0

我有一個使用批處理的spring-boot項目。閱讀工作正常(我從CSV文件中讀取),並映射到我的POJO也可以(也插入數據庫,但不更新...)。春季引導+批處理:JpaItemWriter不更新

但問題來了: 我使用JpaItemWriter和一個帶有自動生成ID(long值)的實體。當我沒有在Bean中設置該Id時,它將是具有下一個值的插入(這應該像它應該那樣工作)。

但問題是,有時我不需要插入,而是更新。當我將Id設置爲與數據庫中現有條目相同的Id(H2 - 保存到文件)時,它會使另一個Insert或我得到主鍵違例。

我也試過@DynamicUpdate(true)@SelectBeforeUpdate(true)在Entity類,但它不起作用。 長Id鍵,也有@Id聲明。

如何強制更新或在我PersistenceContext加載數據庫?

而且ItemReader讀取POJO,MyProcessor轉換POJO到Bean(其中有更多的領域,那只是在DB而不是在CSV文件),並返回要麼null如果沒有什麼是做或豆(或者沒有Id set = Insert,或者帶有舊的Id =,我希望這會是一個更新)。

equals()hashCode()方法只是指Id。

回答

0

解決辦法:我不得不從DB /回購本身回報的項目(豆),而不是一個新創建一個具有相同ID。

然後我得到一個更新。