JPA数据计数无法与org.springframework.data.domain.Page一起正常工作

时间:2019-12-11 03:43:10

标签: jpa spring-data-jpa

我有一个名为CustomerOrderEntity的实体和一个名为CustomerOrder的Dto类,如下所示。

@Entity
public class CustomerOrderEntity implements Serializable {

    @Id
    private String id;
    private String customerId1;
    private String customerId2;
    .......
}

@AllArgsConstructor
@Getter
public class CustomerOrder {
    private String customerId1;
    private String customerId2;
}

在数据库表中,我需要选择唯一的customerId1和它的customerId2。数据库如下所示。

enter image description here

我需要执行的本地查询是

select distinct customerId1, customerId2 from ....

要在JPA中实现这一目标,我拥有以下JPA存储库,

@Repository
public interface CustomerOrderRepository extends JpaRepository<CustomerOrderEntity, String> {
    Page<OrderCustomer> findDistinctByCustomerId1StartingWithOrderByCustomerId1(String customerId1, Pageable pageable);
}

执行此操作时,我发现在页面请求中执行的计数查询正在对id进行计数,而不是对不同的customerId1,cutomerId2进行计数。

查询是

select count(distinct o) from CustomerOrderEntity........

此查询获取与给定值匹配的所有customerId1的计数,不同的customerId1,customerId2除外

因此,我添加了以下JPA查询,

@Query(
    value = "select distinct new OrderCustomer(m.customerId1, m.customerId2) from CustomerOrderEntity m where m.customerId1 like :customerId1% order by m.customerId1"
)

我的问题是

  1. 为什么存储库方法不考虑选择查询而执行其他一些查询计数
  2. 根据我添加的JPA查询,我也需要提供一个计数查询。但是似乎我不能在JPQL中使用选择计数(与m.customerId1,m.customerId2不同)。在那种情况下,我在JPQL中的计数查询应该是什么?

0 个答案:

没有答案