use*_*056 33 java limit jpql jpa-2.0
如何限制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")
Run Code Online (Sandbox Code Playgroud)
但是徒劳!
请建议
Kev*_*sox 41
JPQL
不提供限制查询的机制.这通常是通过使用上面的setMaxResults()
方法实现的Query
.如果必须避免在Java代码中指定它,则可以在包含查询的数据库中创建视图并执行限制.然后像实例一样将实体映射到此视图.
例:
List<String> resultList= query.setMaxResults(100).getResultList();
Run Code Online (Sandbox Code Playgroud)
Geo*_*lou 30
如果您使用的是spring-data,则应使用Pageable Interface.下面的示例代码,
我的服务,
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我的存储库,
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);
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到有关弹簧数据可用选项的更完整答案.
对于需要限制的特定@NamedQueries,您可以切换到@NamedNativeQuery
@NamedNativeQuery(
name=UserNotification.QueryName.NOTIFICATION_DISPLAYED_LIMIT5,
query="SELECT un.* FROM user_notification un " +
"WHERE un.user.id = ?1 LIMIT 5",
resultClass=UserNotification.class
)
Run Code Online (Sandbox Code Playgroud)
不太顺利,但做的工作.
归档时间: |
|
查看次数: |
52516 次 |
最近记录: |