auto-import导致HQL的错误

因为之前没怎么用过hibernate,第一次正儿八经地用,被一个HQL的错误折腾得够呛。


我的hql大致如下:

"from OrderDetail where accountID=:accountID and orderID=:orderID"

但是执行的时候总是报错,说是OrderDetail is not mapped,开始怀疑是我的hibernate配置文件出了问题,改了几次都不见效,后来用同样的配置文件往database里面insert一条记录成功了。那说明配置文件没错,问题就在hql的写法了。


于是:

加上as,"from OrderDetail as detail where detail.accountID=:accountID and detail.orderID=:orderID",没用看来不是这个问题。


后来google一下,发现大部分人提到可能的两个原因。第一是from后面不能是table名,应该是class name,而且是大小写敏感的,这个我没有设置错。第二个,是可以在hibernate配置文件中显示指定一下“hibernate.query.factory_class”属性。这个我开始没有设置,于是把它置为Hibernate3.0的查询翻译器org.hibernate.hql.ast.ASTQueryTranslatorFactory,问题依旧。再试Hibernate2.1的查询翻译器org.hibernate.hql.classic.ClassicQueryTranslatorFactory,也不行,错误提示倒是不一样了。

折腾了半天,后来想是不是得用class的full name,试了一下,将hql改成"from myPackage.OrderDetail where accountID=:accountID and orderID=:orderID",并且把show_sql打开,试了一下,还是不行,把打出来的sql拿出来一看,好像是where字句中的属性没有替换成数据库字段。最后没有办法,加上as,成功了。

"from myPackage.OrderDetail as detail where detail.accountID=:accountID and detail.orderID=:orderID"


后来一琢磨,想到底是什么原因导致需要class的packaged name呢?原来是这auto-import在捣鬼,因为在配置文件中auto-import被设为了false。晕。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值