- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有实体对象:
@Entity(name = "table")
public class SomeEntity {
@Id
@Column(name = "id_column_name")
public final BigDecimal entityId;
@Column(name = "table_column_name")
public final String entityFieldName;
}
我有这样定义的数据库 View :
CREATE OR REPLACE FORCE EDITIONABLE VIEW "V_TABLE" ("ID_COLUMN_NAME", "TABLE_COLUMN_NAME", "SOME_OTHER_COLUMN") AS ... (some SQL magic)
我有自定义查询的存储库:
@RepositoryRestResource
interface SomeEntityRepository extends PagingAndSortingRepository<SomeEntity, BigDecimal> {
@Query(value = "select id_column_name, table_column_name FROM V_TABLE where some_other_column = ?#{#parameter} order by ?#{#pageable}",
countQuery = "SELECT count(*) from V_TABLE v where some_other_column = ?#{#parameter}",
nativeQuery = true)
Page<SomeEntity> findBySomeParameter(@Param("parameter") long parameter, Pageable pageable);
}
当我使用 url 请求标准数据时,一切正常:http://localhost:8080/someEntity/search/findBySomeParameter?parameter=25&page=0&size=20
但是当我添加排序信息时它不起作用:http://localhost:8080/someEntity/search/findBySomeParameter?parameter=25&page=0&size=20&sort=entityFieldName,asc
将抛出以下异常(我使用的是 Oracle 数据库):
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "ENTITYFIELDNAME": invalid identifier
似乎排序字段没有用 @Column(name)
翻译,而是内联到 SQL 查询中。
有什么方法可以翻译可分页排序,使其不使用字段名而是使用列名?
最佳答案
这article阐明了这个问题。从第 3.1 节开始阅读。
显然 native 查询不支持动态排序。实际上,如果您将 findBySomeParameter 方法更改为采用 Sort
而不是 Pageable
,您将得到 org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException:不能将 native 查询与动态排序结合使用
。
使用 pageable 你不会得到异常,分页实际上似乎工作正常,但动态排序不会替换你发现的列名。在我看来,唯一的解决方案是使用 JPQL 而不是 native 查询,只要您需要进行的查询是您提供的查询,这就不是问题。您需要将 View 映射到 SomeEntityView 类才能使用 JPQL。
编辑我认为这个问题没有记录,但它实际上在 official doc 中
Spring Data JPA does not currently support dynamic sorting for native queries, because it would have to manipulate the actual query declared, which it cannot do reliably for native SQL. You can, however, use native queries for pagination by specifying the count query yourself, as shown in the following example:
关于java - Spring Pageable 不翻译@Column 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459684/
“不是首页,但 Pageable 不是有效的 DocumentDbPageRequest,非首页请求需要 requestContinuation”findAll(PageRequest.of(1,10
正如标题所说, @CacheConfig(cacheNames = {"familyUserDao"}) public interface FamilyUserDao extends JpaRepos
所以我想返回一个包含约会的可分页。 pageable 中的每一页都应该只包含发生在某一天的约会。第 0 页应该是今天的日期,下一页将是明天发生的所有约会,并根据请求的页数继续。 如果您请求 3 页,您
我正在使用 JpaRepository Pageable 查询进行分页。除了排序字段区分大小写的问题外,所有的东西都工作正常。以下查询用于获取列表。 Pageable pageable = null;
Controller : @RequestMapping(path = "/serviceslist", method = RequestMethod.GET) public Page get
我想将此代码与 specification-arg-resolver 一起使用使用 @PageableDefault(sort = "createdAt", Direction = Sort.Dire
我应该用 Mockito 为这个方法编写一个测试: public Optional> getAllByPage(Integer pageSize, Integer page) { Pageab
我正在使用 org.springframework.data.domain.Pageable和我的 @RestController . 如何验证或限制页面大小? 没有任何验证,当客户端调用 size
我将一个实体嵌入到另一个实体中,如下所示。该存储库是在 DepEntity 上创建的。我正在尝试检索在 totalExp 列上排序的 DepEntity 对象在ExpEntity中。我正在使用 Pag
我在任何地方都找不到是否可以从字符串手动创建可分页,假设我们有以下服务方法 public List findAnything(final int page, final int size, fina
我使用 Spring 4.1.6.RELEASE 和 Spring Data Jpa 1.8.0.RELEASE。我在创建 org.springframework.data.domain.Pageab
我知道 Pageable 来自 spring-data- 域。 有没有什么优雅的方法可以直接使用 org.springframework.data.domain.Pageable 中的 @RestCo
我正在将 Spring 数据与 一起使用JPA 2.1 使用以下方法检索具有分页和规范(标准构建器)的实体: Page findAll(Specification spec, Pageable pag
我正在尝试通过在 Springboot、JPARepository 中使用 Pageable 来实现分页和排序。不知何故排序不起作用。我在下面包含我的代码,其中我有 Controller 、服务类、存
我花了很多时间在 Webflux 中找到有关 Pageable 的解决方案,不幸的是,在撰写本文时,Webflux 不支持 Pageable 所以我想出了一个解决方案,这就是我已经实现的。这是解决 S
如果我进行查询 @Query("SELECT t FROM Product t WHERE t.isApproved = true AND t.partnerId = ?1 AND t.categ
我有下面的代码。 public static Pageable defaultSort(Pageable currentPageable, String defaultSort) {
我有以下测试代码,我正在测试可分页端点,其中列出了学生的所有条目。 @Autowired private MockMvc mockMvc; @MockBean private StudentR
如何在 Pageable 对象中使用 isPaged()。我已经创建了这样的 pageable 对象。 Pageable pageable = new PageRequest (pageNumber,
在数据库表中products我有12条记录。 Ids 从 1 到 12。我使用 JpaRepository 调用 db,它扩展了 PagingAndSortingRepository。无法理解: 为什
我是一名优秀的程序员,十分优秀!