Spring 批处理 JdbcCursorItemReader:从具有 FK 关系的表中读取
Spring batch JdbcCursorItemReader : reading from tables having FK relation
这是我的 Reader :
private static final String SELECT_ALL_BOOKS = "SELECT * FROM BOOKS WHERE COLOR = 'yellow'";
@Bean
public JdbcCursorItemReader<BookEntity> itemReader(final DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<BookEntity>()
.name("book_reader")
.sql(SELECT_ALL_BOOKS)
.dataSource(dataSource)
.rowMapper(new BeanPropertyRowMapper<>(BookEntity.class))
.build();
}
还有我的实体:
@Entity
@Getter
@Setter
@Table(name = "book")
@AllArgsConstructor
@NoArgsConstructor
public class BookEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_book")
private Integer idBook;
@Column(name = "color")
private String color;
@Column(name = "page_number")
private Integer pageNumber;
@Column(name = "read")
private Boolean read;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinColumn(name = "id_author")
private Author author;
...
...
}
问题 是:随着我的工作执行我的步骤,我有书,但作者 = 空。所以外键没有正确映射,所有其他 String/Integer/Boolean 字段都被正确检索。
我是 Spring 批次的新手,所以我可能使用了错误的 reader。
有人知道这个问题吗?谢谢
请参考 - 您正在使用映射到本机列的 JDBC 项目 reader,并且属性由 BeanPropertyRowMapper
绑定
将与 AUTHOR 表的查询连接更改为本机查询或使用 JPA readers 以支持 ORM
下面的引用将提供存储库 reader
下面的例子给出了一些实现的想法及其 SO 参考
这是我的 Reader :
private static final String SELECT_ALL_BOOKS = "SELECT * FROM BOOKS WHERE COLOR = 'yellow'";
@Bean
public JdbcCursorItemReader<BookEntity> itemReader(final DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<BookEntity>()
.name("book_reader")
.sql(SELECT_ALL_BOOKS)
.dataSource(dataSource)
.rowMapper(new BeanPropertyRowMapper<>(BookEntity.class))
.build();
}
还有我的实体:
@Entity
@Getter
@Setter
@Table(name = "book")
@AllArgsConstructor
@NoArgsConstructor
public class BookEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_book")
private Integer idBook;
@Column(name = "color")
private String color;
@Column(name = "page_number")
private Integer pageNumber;
@Column(name = "read")
private Boolean read;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinColumn(name = "id_author")
private Author author;
...
...
}
问题 是:随着我的工作执行我的步骤,我有书,但作者 = 空。所以外键没有正确映射,所有其他 String/Integer/Boolean 字段都被正确检索。 我是 Spring 批次的新手,所以我可能使用了错误的 reader。
有人知道这个问题吗?谢谢
请参考 - 您正在使用映射到本机列的 JDBC 项目 reader,并且属性由 BeanPropertyRowMapper
绑定将与 AUTHOR 表的查询连接更改为本机查询或使用 JPA readers 以支持 ORM
下面的引用将提供存储库 reader
下面的例子给出了一些实现的想法及其 SO 参考