Java JPQL限制查询
如何限制JPQL命名查询的select查询?我需要在查询层本身而不是java层中完成限制!!! 我正在尝试使用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 " +
@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)
非常有用,感谢您给出与以下相同的答案: