Spring批处理JdbcCursorItemReader:读取具有FK关系的表



这是我的阅读器:

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;
...
...
}

是:与我的工作执行我的步骤,我有书,但与author = null。因此外键没有被正确映射,所有其他String/Integer/Boolean字段都被正确检索。我是Spring批处理的新手,所以可能我使用了错误的阅读器。

有人对这个问题有什么想法吗?由于

请参考此-您正在使用映射到本机列的JDBC项目阅读器,并且属性由BeanPropertyRowMapper绑定

https://docs.spring.io/spring-batch/docs/current/reference/html/readersAndWriters.html JdbcCursorItemReader

将AUTHOR表的查询连接更改为本机查询,或者使用JPA读取器来支持ORM

下面的参考将给出存储库阅读器

https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/item/data/RepositoryItemReader.html

下面的例子给出了一些实现的想法和它的SO引用

https://github.com/gpassini/Spring-Batch-RepositoryItemReader-NativeQuery-Example/tree/master/src/main

最新更新