JPQL 限制查询

2022-08-31 22:23:30

如何限制 JPQL 命名查询的选择查询?我需要在查询级别本身而不是在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")

但徒劳无功!!!

请建议


答案 1

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

例:

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

答案 2

如果您正在处理弹簧数据,则应使用可分页界面。下面的示例代码,

我的服务,

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;
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);

}

您可以在此处找到有关弹簧数据可用选项的更完整答案。


推荐