首页 > 解决方案 > 如何为 JPA View 实体传递动态限制值?

问题描述

我在 MySQL 中创建了一个视图,我在 JPA 中使用该视图作为实体,

@Entity
@Immutable
@Table(name = "my_view")

现在我面临的问题是我试图通过在查询对象中设置 setMaxResults 来进行分页,在后端发生的事情是视图没有限制,因此它试图获取所有记录,然后应用setMaxResults,这正在扼杀我本可以编写本机查询的性能,但它有点混乱。

生成的查询将如下所示

select e from myViewEntity where 1=1 and (adding addition constraints as parameter)

我的问题有什么办法可以将 Limit 作为动态值传递给视图?

注意:我通过使用别名将约束传递给视图。

标签: mysqlhibernatespring-mvcjpa

解决方案


您可以通过动态传递 firstResult 和 maxResults 的值在查询中使用setFirstResult和方法,如下所示。setMaxResults

List<User> users = entityManager().createQuery("SELECT o FROM User o", User.class).setFirstResult(firstResult).setMaxResults(maxResults).getResultList();

推荐阅读