【问题标题】:unexpected end of subtree子树的意外结束
【发布时间】:2012-11-09 09:54:42
【问题描述】:

我将 JPA 与休眠一起使用。我想检查具有指定名称和用户名的行是否存在。以下查询引发错误:

@Query("select exists (select 1 from Strategy s where s.name=:name and s.username=:username)")
Boolean exists2(@Param("name") String name,@Param("username") String username);

错误:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree [select exists (select s from com.soft.domain.strategy.Strategy s where s.name=:name and s.username=:username)]

有什么想法吗?

【问题讨论】:

  • 这里有 2 个 workaournds:1) 使用 [querydsl])querydsl.com) 存在方法 2) 在查询中使用 count

标签: hibernate jpa spring-data-jpa


【解决方案1】:

我通过切换以下查询解决了这个问题:

@Query("select count(s) from Strategy s where s.name=:name and s.username=:username")
long exists2(@Param("name") String name, @Param("username") String username);

【讨论】:

  • 这是一种变通方法,可以解决问题。
【解决方案2】:

您是否将“:name”和“:username”放回自己的位置以代替示例值,还是您收到的确切错误消息?如果那是确切的消息,那么您的命名参数似乎没有被替换。我对hibernate的这种特殊用法没有太多经验,但是从某个地方开始研究命名参数与@Query注释的结合使用。 (不幸的是,这个例外从一开始就没有说明这一点)

【讨论】:

  • 上下文初始化期间抛出错误(我使用 Spring MVC)。我认为替换参数不会引发错误。
猜你喜欢
  • 2018-12-21
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2014-03-27
  • 1970-01-01
  • 2011-06-03
  • 2019-12-25
相关资源
最近更新 更多