在HQL查询上使用Limit

时间:2018-08-16 09:46:31

标签: postgresql hibernate spring-boot jpa hql

我在JpaRepository中有一个 HQL 查询

public interface LineRepository extends JpaRepository<LineEntity , Integer>{
    @Query(
            value = "SELECT l from LineEntity l" +
                    "WHERE l.lineCode = :lineCode "
    )
    List<LineEntity> findAllByLineCode(
            @Param("lineCode")int lineCode
    );

}

我想更改此方法以返回LineEntity限制仅适用于 nativeQuery ,我想将其放入注释

4 个答案:

答案 0 :(得分:1)

如果有很多具有相同LineCode的LineEntity,那么您需要一个额外的属性,该属性可以是id,例如:

Conv2D

答案 1 :(得分:0)

在休眠状态下的查询对象上,您具有setMaxResults(int maxResults)方法。

我没有使用如何将其放入批注中,而是采用了经典的方式:

Query q = session.createQuery("XXX").setMaxResults(1000);
q.list();

答案 2 :(得分:0)

如果您希望不进行查询就可以这样做,那么我们可以使用 Pageable 界面。 只需执行两个步骤即可。

1)在控制器中

@RequestMapping("/getLineByLineCode/{code}")    
public @ResponseBody Page<LineEntity> getFirstUserByName(@PathVariable String code,Pageable pageable)
{
  // this pageable for single result.(first result will return)
    Page<LineCode> line = repository.findByCode(code,new PageRequest(0,1));
                                                        //(start index,upto index)
   return line;
} 

2)在存储库中

public interface LineRepository extends JpaRepository<LineEntity , Integer>{
       Page<LineCode> findByCode(String code,Pageable pageable);
}

答案 3 :(得分:-1)

documentation声明

  

可以通过使用first或top关键字来限制查询方法的结果,这些关键字可以互换使用。可以在顶部或顶部附加可选的数值,以指定要返回的最大结果大小。如果省略数字,则假定结果大小为1

因此要限制为10,您还可以使用:

List<LineEntity> findTop10ByLineCode(int lineCode);