簡體   English   中英

如何在PreparedStatement中使用自動生成的@Id?

[英]How to use auto-generated @Id in PreparedStatement?

我正在使用PreparedStatement將值批量插入到postgres數據庫中,如下所示:

JdbcBatchItemWriter<FieldSet> w = new JdbcBatchItemWriter<>();
w.setDataSource(ds);
w.setSql("INSERT INTO my_table(firstname,lastname) VALUES(?,?)");
w.setItemPreparedStatementSetter(new ItemPreparedStatementSetter() {
    //pseudocode
    ps.setString(1, "test");
    ps.setString(2, "testname");
});

問題:我的實體類還具有自動生成的@Id ,此處未設置。

@Entity
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String firstname, lastname;
}

結果,這導致以下錯誤:

原因:org.postgresql.util.PSQLException:錯誤:列ID中的NULL值? 違反了Not-Null-Constraint。

當然,因為我沒有設置id 但是,如何讓它自動生成?

由於您正在處理JPA實體,因此不能使用JdbcBatchItemWriter ,后者不知道JPA批注,而是使用JpaItemWriter

示例配置為:

<bean id="jpaItemWriter" class="org.springframework.batch.item.database.JpaItemWriter">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

其中, entityManagerFactory是您的實體管理器工廠bean。 然后,您可以直接使用此ItemWriter或將其作為委托插入另一個ItemWriter

如果要使用JPA進行批處理,請參閱此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM