`
sichen84
  • 浏览: 56113 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

case when 无法执行,为什么

阅读更多
Hql 语句:
select sum(case when to_char(t.accountinoutDate,'yyyymmdd hh24:mi:ss') < to_char(to_date('2010-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyymmdd hh24:mi:ss') then (case when t.accountinoutDirection = 0 then 1 else -1 end) * t.accountinoutMoney end) as startmoney, t.inneraccountsCode,t.orgCode from FundAccountinout t
group by t.inneraccountsCode,t.orgCode

报错:
17:43:09,312 ERROR [[default]] Servlet.service() for servlet default threw exception
org.hibernate.hql.ast.QuerySyntaxException: fundAccountinout is not mapped [select (case when t.accountinoutDirection = 0 then 1 else -1 end) * t.accountinoutMoney as startmoney, t.inneraccountsCode,t.orgCode from fundAccountinout t where to_char(t.accountinoutDate,'yyyymmdd hh24:mi:ss') <= to_char(to_date('2010-07-30 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyymmdd hh24:mi:ss') and t.memberCode = ? group by t.inneraccountsCode,t.orgCode]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:277)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:923)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921)
at com.golden.soft.common.system.dao.HibernateGenericDao.getResultCount(HibernateGenericDao.java:635)
at com.golden.soft.common.system.dao.HibernateGenericDao.queryForPageByHql(HibernateGenericDao.java:330)

原因是红色部分,即类名写错了,严格区分大小写
case when在hibernate中是可以使用的,但是语法比较严格
hql语句应改为(注意红色部分)
select sum(case when to_char(t.accountinoutDate,'yyyymmdd hh24:mi:ss') < to_char(to_date('2010-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyymmdd hh24:mi:ss') then ((case when t.accountinoutDirection = 0 then 1 else -1 end) * t.accountinoutMoney) end) as startmoney, t.inneraccountsCode,t.orgCode from FundAccountinout t
group by t.inneraccountsCode,t.orgCode
另外注意,xml中需要<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
分享到:
评论

相关推荐

    case when和sum case when 写法及拼接字段

    ### Case When 用法 在 SQL 查询语言中,`CASE WHEN` 结构是一种非常有用的工具,可以用来根据条件返回不同的值。它的工作原理类似于编程语言中的 `if...else` 语句,但在 SQL 中用于创建动态列或进行复杂的条件...

    详细解析 mysql 中的 case when 语句的使用

    `CASE WHEN`语句提供了一种灵活的方式来根据条件返回不同的结果,尤其适合于需要根据特定条件执行不同操作的场景。此外,`CASE WHEN`还可以与其他SQL语句结合使用,比如聚合函数、子查询等,以满足更复杂的业务需求...

    decode函数与case when 的妙用

    在数据库管理和SQL编程中,`DECODE`函数和`CASE WHEN`语句是两种非常重要的逻辑判断工具,它们常用于处理条件分支和数据转换。在这篇文章中,我们将深入探讨这两种方法的用途、区别以及如何巧妙地运用它们。 首先,...

    casewhen多条件oracle-casewhen(casewhen同时满足多条件).pdf

    CASE WHEN 语句是 SQL 中的一种条件语句,用于实现多个条件的判断和执行。它可以用来代替 IF 语句和 SWITCH 语句,在 Oracle 数据库中尤其常用。 CASE WHEN 语句的基本语法是: ```sql CASE WHEN 条件 THEN 结果 ...

    sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End

    在进行SQL到Access SQL的转换过程中,一个重要的知识点是了解如何将SQL中的`CASE WHEN THEN`结构转换为Access中的等效表达式。在SQL中,`CASE WHEN THEN`是一种常用的条件表达式,用于根据不同的条件返回不同的值。...

    SqlServer使用 case when 解决多条件模糊查询问题

    当参数为空字符串时,`CASE WHEN` 返回该字段本身,使`CHARINDEX` 总能找到自己,从而满足查询条件;当参数非空时,它将匹配对应的字段值,执行模糊查询。 例如,对于Employees表的查询,如果`@FirstName` 和`@...

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    在Oracle SQL中,有几个关键概念和技术值得深入理解,包括CASE WHEN语句、查看执行计划、文本操作、锁定和解锁表以及游标。以下是对这些知识点的详细解释: 1. **CASE WHEN语句**: CASE WHEN是SQL中的一个条件...

    Case_When用法

    标题《Case_When用法》为我们提供了一个深入学习SQL中Case表达式使用方法的契机。在SQL中,Case表达式是一个条件分支结构,允许在查询中进行条件判断,并基于条件返回不同的结果。该表达式分为两种格式:简单Case...

    oracle case when 语句的用法详解

    Oracle的CASE WHEN语句是SQL查询中的一个非常重要的条件判断工具,它允许你在单个查询中根据不同的条件执行不同的操作。CASE WHEN语句有两种主要形式:简单CASE和搜索CASE。 **1. 简单CASE函数** 简单CASE主要用于...

    vhdl.rar_case when fpga_频率控制

    本案例主要关注如何使用VHDL中的`case when`语句来实现FPGA(Field-Programmable Gate Array)中的频率控制,特别是针对交通灯控制系统的应用。 交通灯控制系统是城市交通管理的关键部分,它通过精确的时间序列控制...

    MySQL中使用case when 语句实现多条件查询的方法

    在MySQL数据库中,`CASE WHEN` 语句是一种强大的条件表达式,用于在查询中进行复杂的逻辑判断。本文将深入探讨如何使用`CASE WHEN`语句实现多条件查询,特别是针对给定的示例场景。 首先,让我们了解`CASE WHEN`的...

    SQL集合函数中case when then 使用技巧

    在SQL中,`CASE WHEN THEN` 语句用于条件判断,它可以用来转换或过滤数据,尤其是在聚合函数中,如 `COUNT()`, `SUM()`, `AVG()` 等。这个表达式允许我们在一个查询中根据不同的条件执行不同的操作。 在标题提到的...

    case when then语句用法

    该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不...

    MySQL的CASE WHEN语句的几个使用实例

    MySQL中的CASE WHEN语句是一种非常实用的SQL构造,它允许你在单个查询中根据不同的条件执行不同的操作,比如数据转换、分类或者计算。这个语句主要用于处理复杂的逻辑判断,尤其在需要对数据进行条件性处理时,CASE ...

    sql中的case用法

    Case 语句是 SQL 中一种强大的语句,用于根据不同的条件执行不同的操作。它可以用来实现复杂的逻辑操作,并且可以与其他 SQL 语句结合使用以实现更加复杂的查询。 SQL 中 Case 语句有两种格式:简单 Case 函数和 ...

    sql学习之CASE WHEN THEN ELSE END的用法

    在SQL语言中,`CASE WHEN THEN ELSE END`结构是一种强大的条件判断工具,它允许你在查询中根据特定条件执行不同的逻辑。这个结构可以在`SELECT`、`WHERE`、`HAVING`、`UPDATE`和`INSERT`等语句中使用,以实现复杂的...

    mysql存储过程之case语句用法实例详解

    如果`case_expression`的值与`when_expression`之一匹配,那么对应的`commands`部分会被执行。如果没有匹配到任何`when_expression`,则执行`ELSE`后的`commands`。`ELSE`子句是可选的,若不指定,且没有匹配项,...

    SQL中Case语句用法讨论_BJ

    在SQL查询语言中,`Case`语句是一个非常强大的功能,用于在查询中执行条件判断,它可以根据不同的条件返回不同的结果,这使得SQL能够处理更加复杂的数据筛选和转换需求。`Case`语句有两种基本形式:简单`Case`表达式...

    sum(case when then)(判断男女生的个数)

    在SQL查询中,`SUM(CASE WHEN THEN)` 是一种非常有用的聚合函数,它允许我们根据特定条件对数据进行分类并求和。在这个场景中,它被用来计算一个类比班级中男生和女生的数量。让我们详细了解一下这个技术及其应用。 ...

Global site tag (gtag.js) - Google Analytics