[英]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.