Java JPQL限制查询

Java JPQL限制查询,java,jpa-2.0,limit,jpql,Java,Jpa 2.0,Limit,Jpql,如何限制JPQL命名查询的select查询?我需要在查询层本身而不是java层中完成限制!!! 我正在尝试使用 @NamedQueries(value = { @NamedQuery(name = UserNotification.QueryName.NOTIFICATION_DISPLAYED, query = "SELECT un FROM UserNotification un " +

如何限制JPQL命名查询的select查询?我需要在查询层本身而不是java层中完成限制!!! 我正在尝试使用

@NamedQueries(value = {
        @NamedQuery(name = UserNotification.QueryName.NOTIFICATION_DISPLAYED,
                    query = "SELECT un FROM UserNotification un " +
                            "WHERE un.orgId IN (:orgList) " +
                            "AND un.user.id = :userId LIMIT 5")
但这是徒劳的


请建议

JPQL
不提供限制查询的机制。这通常通过使用
查询
上的
setMaxResults()
方法来实现。如果必须避免在Java代码中指定此项,则可以在包含查询的数据库中创建一个视图并执行限制。然后将实体映射到此视图,就像映射表一样

例如:

List<String> resultList= query.setMaxResults(100).getResultList();
List resultList=query.setMaxResults(100.getResultList();

使用实体管理器执行查询时,只需编写.setMaxResults(obj的编号)

对于需要限制的特定@namedQuery,您可以切换到@namedNaviRequesty

@NamedNativeQuery(
  name=UserNotification.QueryName.NOTIFICATION_DISPLAYED_LIMIT5,
  query="SELECT un.* FROM user_notification un " + 
        "WHERE un.user.id = ?1 LIMIT 5",
  resultClass=UserNotification.class
)

虽然不是很顺利,但可以完成任务。

如果您与您一起工作,您应该使用。下面是一个示例代码

我的服务

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

@Service
public class MyModelService {

    @Autowired
    private MyModelRepository myModelRepository;

    @Transactional
    public Page<MyModel> findMyModelTop5() {
        return myModelRepository.findMyModelTop5(new PageRequest(0, 5));
    }
}
import org.springframework.data.domain.Page;
导入org.springframework.data.domain.PageRequest;
@服务
公共类MyModelService{
@自动连线
私有MyModelRepository MyModelRepository;
@交易的
公共页面findMyModelTop5(){
返回myModelRepository.findMyModelTop5(新页面请求(0,5));
}
}
我的存储库

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

@Repository
public interface MyModelRepository extends JpaRepository<MyModel, Integer> {

    @Query("SELECT mm FROM MyModel mm")
    public Page<MyModel> findMyModelTop5(Pageable pageable);

}
import org.springframework.data.domain.Page;
导入org.springframework.data.domain.Pageable;
@存储库
公共接口MyModelRepository扩展了JpaRepository{
@查询(“从MyModel mm中选择mm”)
公共页面findMyModelTop5(可分页);
}

您可以找到关于spring数据可用选项的更完整的答案。

这正是我一直在寻找的,通过所有搜索,只有您这样提及。。。谢谢…这很有用。非常感谢:)请注意,此解决方案将启动两个SQL查询:一个查询带有限制的SELECT,另一个查询带有页面元数据元素的SELECT COUNT。当一个查询包含一些额外的WHERE子句时,这可能会很慢。工作起来很有魅力,但有一个例外——我必须将查询设置为本机查询,否则它将无法运行我的spring boot应用程序
@Query(value=“从MyModel mm中选择mm”,nativeQuery=true)
非常有用,感谢您给出与以下相同的答案: