Spring Data R2DBC 中实体具有关系时的分页

问题描述 投票:0回答:1

我有一个实体

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "employees")
public class EmployeeEntity implements Persistable<String> {

    @Id
    @Column("id")
    private String id;

    @Column("photo_url")
    private String photoUrl;

    @Column("description")
    private String description;

    @Transient
    private UserEntity user;

    @Transient
    private boolean isNew = false;
}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "users")
public class UserEntity implements Persistable<String> {

    @Id
    @Column(value = "id")
    private String id;

    @Deprecated
    @Column(value = "name")
    private String name;

    @Column("first_name")
    private String firstName;

    @Column("last_name")
    private String lastName;

    @Transient
    private boolean isNew = false;
}

但是当我尝试让所有员工都进行这样的分页时

@Query("""
            SELECT *
            FROM employees e
            LEFT JOIN users u ON e.user_id = u.id
            WHERE e.dealer_id = :id
            """)
    Flux<EmployeeEntity> findAllByDealerId(String id, Pageable pageable);

Employee 中的 User 始终为 null。

Pageable 可以包含来自两个实体的排序关键字,这就是我需要连接这些表的原因。如果有人知道为什么 user 总是为 null 或者有人知道另一种让员工拥有 user 和可分页的方法,那就太好了:)

spring pagination spring-webflux r2dbc
1个回答
0
投票

Spring Data R2dbc/R2dbc 不支持 JPA 那样的一对一、一对多关系,对于复杂的查询我建议使用 jOOQ 代替,jOOQ 已经添加了 R2dbc 支持。我们在生产中使用 jOOQ 进行 R2dbc 已有两年多了。

检查我的 jOOQ 查询示例项目,其中包含一对多关系, https://github.com/hantsy/spring-r2dbc-sample/blob/master/jooq/src/main/java/com/example/demo/DemoApplication.java#L174-L213

© www.soinside.com 2019 - 2024. All rights reserved.