当前位置: 首页 > 知识库问答 >
问题:

countQuery中的spring-data-jpa SpEL,使用#{#entityname}-意外字符:“#”

赵飞语
2023-03-14

自所问问题后的更新

https://github.com/spring-projects/spring-data-jpa/pull/283

描述

我已经配置了spring-boot+spring-data-jpa项目。我的存储库有下一个自定义查询:

@Repository
public interface MyEntityRepository extends JpaRepository<MyEntity, String>, QueryDslPredicateExecutor<MyEntity> {
  ...
  @Query(
      value = " SELECT me.name FROM #{#entityName} me ",
      countQuery = " SELECT COUNT(me.name) FROM MyEntity me "
  )
  Page<String> findAllMyEntityNames(final Predicate predicate, final Pageable pageable);
  ...
}
countQuery = " SELECT COUNT(me.name) FROM #{#entityName} me " 
    null
...
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: unexpected char: '#' [ SELECT COUNT(me.name) FROM #{#entityName} me ]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
...
Caused by: org.hibernate.QueryException: unexpected char: '#' [ SELECT COUNT(me.name) FROM #{#entityName} me ]
...

问候,马克西姆

共有1个答案

闻人德庸
2023-03-14

spring团队修复了这个bug:https://jira.spring.io/browse/datajpa-1163

证明位于以下位置:https://github.com/daggerk/spring-5-examples/blob/dd7e4e88d260acdc02cb4dd7de568aa9a533d4d9/spring-data-count-query-fix/src/main/java/daggerk/data/orderrepository.java#l23

 类似资料:
  • 问题内容: Redis 3.0.5 Spring数据Redis 1.3.6 jedis 2.6.3- 我们的Web应用程序,它通过pub / sub从redis接收数据。 -还以键/值对的形式对redis进行数据读/写。 -读/写发生在侦听器线程,独立监视线程和http请求线程上。 -我们对侦听器和Redis模板使用了相同的连接工厂 -我们的Redis服务器已配置“ timeout = 30” 在

  • 我读过其他线程,谈到使用单线程进行读/写。但是在我们的情况下,很难使用单线程。同样,根据RedisTemplate文档,它是线程安全的。该问题是偶然的,我们无法在任何开发/测试/UAT环境中重现。因此无法找到相同的确切原因。我们做错了什么?

  • 包org.springframework.data.neo4j.annotation中的注释@Query提供了某些计数属性,如CountQuery、CountQueryName。 有人能解释一下这些的用法吗?更具体地说,我写了一个查询来获取关于一个主题的帖子。查询结果将被分页。下面的查询工作正常,并给我的结果。 现在我还需要结果的总数,我是否必须为此编写另一个查询,或者是否有一种方法可以容纳计数查

  • 问题内容: 由于某种原因,我收到一条错误消息,但是实际上并没有在读取的任何代码中加下划线。我尝试清洁和重建它,但是没有用。它说它在第49行。 我的代码如下 下面的第49行 问题答案: 你内有两个“奇数”字- U + 200C (零宽不连字)和U + 200B (零宽度的空间)的第一个“e”和“m”个之间。“ l”和“ i”之间的“点击”中出现相同的字符。 只需删除并重新输入这些单词,错误就会消失。

  • 问题内容: 在尝试进入sql查询数组并获得以下javascript错误后,我尝试通过php jquery传递json。 返回sql结果的函数: 以这种方式使用此功能后, 而javascript代码是这样的: 如何纠正此错误以及如何从jquery读取json? 问题答案: 您不需要调用,因为jQuery自动执行该调用,因为如果未指定属性,则jQuery会尝试猜测它并调用正确的函数来解析响应,然后再将