关于hibernate中使用case when 和函数,查询解析配置的问题

最近老大给个任务,他在使用HQL语言进行数据查询的时候使用了case when,运行之后并没有执行,反而报错,提示不识别case

 

于是交给我解决,查找资料显示,hibernate有个查询解析器,需要配置,各个版本提示如下:

Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,不过,Hibernate2.1的查询翻译器也依然存在。在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。例如:

(1)选择Hibernate3.0的查询翻译器:

hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory

(2)选择Hibernate2.1的查询翻译器

hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory

 

提示:ANTLR是用纯Java语言编写出来的一个编译工具,它可生成Java语言或者是C++的词法和语法分析器,并可产生语法分析树并对该树进行遍历。ANTLR由于是纯Java的,因此可以安装在任意平台上,但是需要JDK的支持。

Hibernate开发小组尽力保证Hibernate3.0的查询翻译器能够支持Hibernate2.1的所有查询语句。不过,对于许多已经存在的应用,在升级过程中,也不妨仍然使用Hibernate2.1的查询翻译器。

值得注意的是, Hibernate3.0的查询翻译器存在一个Bug:不支持某些theta-style连结查询方言:如Oracle8i的 OracleDialect方言、Sybase11Dialect。解决这一问题的办法有两种:(1)改为使用支持ANSI-style连结查询的方言,如 Oracle9Dialect,(2)如果升级的时候遇到这一问题,那么还是改为使用Hibernate2.1的查询翻译器。

 

于是我在项目中加上了hibernate3.0的配置方式,但是这个时候问题来了,提示我找不到 org.hibernate.hql.ast.ASTQueryTranslatorFactory

于是各种百度,结果显示需要使用antlr的jar包,但是项目中已经包含jar包,然后各种郁闷

仔细看过项目之后了解,这个项目用的是hibernate4版本以上,解析器配置采用的是默认的配置,可是还是解决不了

然后把我的hql语句 String hql = "from Event as e where case e.viewPermission when 1 then 1=1 when 0 then e.id in (select er.eventID as id from EventRecord as er where er.openID = 1) else 1=1 end"; 中的case  when 放到了from 前面 结果可以执行,不报错

最后了解  hql支持简单的case  when 。。。。

然后郁闷透顶,最近在hql语言中使用时间函数,也是不支持。。。。

转载于:https://www.cnblogs.com/lhywd/p/4997320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值