簡體   English   中英

Spring Data JPA:如何在countQueries中重復自己?

[英]Spring Data JPA: How not to repeat myself in countQueries?

我正在使用Spring Data JPA存儲庫(1.7.2),我通常面臨以下情況:

  • 實體具有延遲加載的集合
  • 有時會急切地獲取這些集合(通過JPAQL fetch join
  • 存儲庫通常返回Page<Foo>而不是List<Foo>

我需要為每個在返回Page的存儲庫上使用fetch join的@Query提供countQuery StackOverflow問題已討論過此問題

我的典型存儲庫方法如下所示:

@Query(value = "SELECT e FROM Employee e LEFT JOIN FETCH e.addresses a " +
    "WHERE e.company.id = :companyId " +
    "AND e.deleted = false " +
    "AND e.primaryAddress.deleted = false " +
    "ORDER BY e.id, a.id",
    countQuery="SELECT count(e) FROM Employee e WHERE e.companyId = :companyId AND e.deleted = false AND e.primaryAddress.deleted = false"
)
Page<Employee> findAllEmployeesWithAddressesForCompany(@Param("companyId") long companyId, Pageable pageable);

顯然, 它不是很干 您可以告訴我正在重復valuecountQuery參數中的所有條件。 我怎么待在這里干?

你可以這樣做

public interface MyRepository extends JpaRepository {

    public static final String WHERE_PART = "e.companyId = :companyId AND e.deleted = false AND e.primaryAddress.deleted = false ";

    @Query(value = "SELECT e FROM Employee e LEFT JOIN FETCH e.addresses a " +
        "WHERE " + MyRepository.WHERE_PART
        "ORDER BY e.id, a.id",
        countQuery="SELECT count(e) FROM Employee e WHERE " + MyRepository.WHERE_PART
    )
    Page<Employee> findAllEmployeesWithAddressesForCompany(@Param("companyId") long companyId, Pageable pageable);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM