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

绑定

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

将与 AUTHOR 表的查询连接更改为本机查询或使用 JPA readers 以支持 ORM

下面的引用将提供存储库 reader

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