Spring Data - 带自定义查询(HQL)的PagingAndSortingRepository?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (374)

试图将PagingAndSortingRepository与自定义查询混合,没有运气..

定制回购:

public interface SiteRepositoryCustom
{
    public List<SitesDbRecord> getActiveSites();
}

Impl回购:

@Repository
public class SiteRepositoryImpl implements SiteRepositoryCustom
{
    private static final Logger logger = ...

    @PersistenceContext
    private EntityManager em;

    @Override
    public List<SitesDbRecord> getActiveSites()
    {
        logger.info( "getActiveSites start" );

       try
       {
          String hql = "select s from SitesDbRecord s where s.isActive = true";

          return em.createQuery( hql ).setMaxResults( Integer.MAX_VALUE ).getResultList();
       }
       catch ( Exception e )
       {
          logger.error( "getActiveSites failed.", e );

          return null;
       }
   }
}

注入服务的回购:

public interface SiteRepository extends PagingAndSortingRepository<SitesDbRecord, Integer>, SiteRepositoryCustom  {
    public List<SitesDbRecord> getActiveSites( Pageable pageable );
    public List<SitesDbRecord> getActiveSites();
}

如果我只是扩展CrudRepository(没有Pageable方法)那么一切都OK。尝试扩展PagingAndSortingRepository(使用或不使用Pageable方法)然后Spring无法启动

PropertyReferenceException: No property getActiveSites found for type SitesDbRecord!

将PagingAndSortingRepository与自定义查询一起使用的正确方法是什么?可能是错了,但我认为提供分页/排序处理是Spring的责任。

提问于
用户回答回答于

如果SitesDbRecord有boolean属性命名active它应该是:

public interface SiteRepository extends PagingAndSortingRepository<SitesDbRecord, Integer> {
    public List<SitesDbRecord> findByActiveIsTrue( Pageable pageable );
    public List<SitesDbRecord> findByActiveIsTrue();
}

无需扩展自定义存储库,只需实现PagingAndSortingRepository即可

扫码关注云+社区

领取腾讯云代金券