gpt4 book ai didi

java - 如何在 PreparedStatement 中使用自动生成的@Id?

转载 作者:行者123 更新时间:2023-11-29 12:59:49 27 4
gpt4 key购买 nike

我正在使用 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;
}

因此,这会导致以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: NULL-value in column ?id? violates 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 或将其作为委托(delegate)注入(inject)另一个 ItemWriter

如果想用JPA做批处理,请引用this question .

关于java - 如何在 PreparedStatement 中使用自动生成的@Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com