您的位置:首页 > 产品设计 > UI/UE

关于hibernate执行createSQLQuery时字段重名的问题

2013-09-28 21:38 387 查看
海阔凭鱼跃,天高任鸟飞!

关于hibernate执行createSQLQuery时字段重名的问题

        前些天做了一个小项目,主要做日志评估这块,由于各种的查询用于计算过于复杂,某些查询用hql很难实现,因此用了hibernate自带的createSQLQuery方法。前几天忙于编码,也没做测试,昨天找了些数据,做些调试,还算ok,无意中看到某些字段的值竟然是一样的,然后就各种的调试,从数据库中取到的元素值竟然是一样的,然后便尝试用原始的SQL语句进行查询,结果是SQL查询正确,hibernate取值错误,郁闷之极啊!怎么办?凉拌呗!从网上找各种资料,尝试了N种方法,无果而终!

       大家的解决方案无非以下几种:

              1.改成hql语句(这个首先否定,因为关联的表太多,用到的函数也很多)

              2.用addEntity加以区分(这个试了几次,很繁琐,无果而终)

              3.执行jdbc(最后的招了,改很容易,但是应该还有更容易的解决方案吧)

        哥们用第二种方案调了一晚上,又累有头晕,果断放弃。究其原因:几个表里的字段有相同的值,hibernate取值设值用的是get,set方法,如果有相同的字段,它区分不了。

       其他方法都不行,怎么办?还是最后一招吧。改成jdbc后,RowSet返回值后,竟然也是同样的问题。Oh,My God!

       哥们当时就崩溃了,你妈的后招被封死了。由于没有可参考的实例,哥们突发奇想,用子查询把重名的字段as一下,然后调了一下,通过,OK!

      
总结:

                   1.hibernate执行sql原理,字段的set、get.

                  2.重名字段的解决方案,子查询把重名的替换掉

                  3.数据库设计的时候最好不要重名,要充分地考虑实现

                  4.某些问题的解决,还是从原理上入手,网络不是万能的,得有自己的思想

                  5.重视细节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息