hibernate sqlQuery mysql别名问题

这两天,在写一些订单数据的查询展示(因为有些数据想在sql中直接算出)提高效率。所以用了自己拼装的 hql

之前是的sql如下:

妥投/退货的SQL
SELECT o.id ,o.sn, o.community_id , o.seller_id , o.status , o.pay_rate ,o.payment_id,o.payment_profit,o.cwy_profit, o.amount, o.delivery_fee ,o.bank_pay , o.completed_date ,o.create_time , o.red_packet_pay , o.coupon_pay ,o.cwy_profit, (o.pay_rate * o.bank_pay / 100) as poundage , (o.cwy_profit * o.bank_pay) as profit , (o.payment_profit * o.bank_pay / 100) as pay_profit , c.name as comm_name , s.name as shop_name , s.checkout_days , s.deduct , ri.shop_id as red_shop_id , ri.red_money as ri_money , qi.shop_id as coupon_shop_id , qi.coupon_money as qi_money, d.id as diff_fee_id,d.status as diff_status,d.diff_fee as fee,d.balance_id FROM `order` o LEFT JOIN diff_fee d ON d.order_id = o.id LEFT JOIN community c ON o.community_id = c.id LEFT JOIN shop s ON o.seller_id = s.id LEFT JOIN red_receives r ON o.red_recevices_id = r.id LEFT JOIN red_packet_infos ri ON r.red_id = ri.id LEFT JOIN coupon_receives q ON o.coupon_recevices_id = q.id LEFT JOIN coupon_infos qi ON q.coupon_id = qi.id WHERE o.community_id > 0 AND o.payment_id != 0 AND o.status IN ( 4,5,7 ) AND UNIX_TIMESTAMP( o.completed_date ) >= :start_time AND UNIX_TIMESTAMP( o.completed_date ) <= :end_time AND o.seller_id = :seller_id ORDER BY completed_date DESC

但是,一直报错,说

1] (JDBCExceptionReporter.java:234) - Column ‘shop_id ‘ not found.

后面我吧 有关 shop_id的列删除了,继续报下个列 coupon_money  找不到。很郁闷,各种可能性都想过了,也叫同事帮看了,都找不到原因。后面列去家,发现是 用了 as 去另外起别名引起的,后面就改成了下面的语句,就行了。

sql="SELECT o.id ,o.sn, o.community_id , o.seller_id , o.status , o.pay_rate ,o.payment_id,o.payment_profit,o.cwy_profit, o.amount, o.delivery_fee ,o.bank_pay , UNIX_TIMESTAMP(o.completed_date) ,o.create_time , o.red_packet_pay , o.coupon_pay ,o.cwy_profit, (o.pay_rate * o.bank_pay / 100) as poundage , (o.cwy_profit * o.bank_pay) as profit , (o.payment_profit * o.bank_pay / 100) as pay_profit , c.name  , s.name  , s.checkout_days , s.deduct , ri.shop_id , ri.red_money  , qi.shop_id  , qi.coupon_money , d.id ,d.status ,d.diff_fee ,d.balance_id FROM `order` o LEFT JOIN diff_fee d ON d.order_id = o.id LEFT JOIN community c ON o.community_id = c.id LEFT JOIN shop s ON o.seller_id = s.id LEFT JOIN red_receives r ON o.red_recevices_id = r.id LEFT JOIN red_packet_infos ri ON r.red_id = ri.id LEFT JOIN coupon_receives q ON o.coupon_recevices_id = q.id LEFT JOIN coupon_infos qi ON q.coupon_id = qi.id WHERE o.community_id > 0 AND o.payment_id != 0 AND o.status =10 AND UNIX_TIMESTAMP( o.completed_date ) >= "+balance.getStartTime()+" AND UNIX_TIMESTAMP( o.completed_date ) <= "+balance.getEndTime()+" AND o.seller_id = "+form.getShopId()+" ORDER BY completed_date DESC";

看到网友还有一种解决办法,不知道行不行,我没试过,也记录一下吧

解救方法:

困扰了我很久 ,找了很多资料,问题很简单,就是驱动不支持别名的问题,这里记录下,为后来人造桥!!! 在连接mysql数据库的时候添加    useOldAliasMetadataBehavior=true  这个参数!!!!

jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/db?useUnicode\=true&characterEncoding\=utf8&useOldAliasMetadataBehavior=true

时间: 2024-11-05 15:52:32

hibernate sqlQuery mysql别名问题的相关文章

Hibernate - SQLQuery

使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 标量查询(Scalar queries) 最基本的SQL查询就是获得一个标量(数值)的列表. sess.createSQLQuery("SELECT * FROM CATS").list(); sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE

Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的. Session.createSQLQuery(); 1.1标量查询 最基本的SQL查询就是获得一个标量(数值)的列表. sess.createSQLQuery("SELECT * FROM CATS").list(); sess.createSQL

hibernate 连接 mysql 乱码的情况

在本地开发环境中,一切正常,部署到服务器后(windows 2003 + tomcat)含有中文的查询和表单提交都有乱码,从以下几个方面检查并解决了问题: 1.将所有jsp.js.css文件默认编码改为了utf-8,未解决问题. 2.struts2的配置文件中加入了节点:<constant name="struts.i18n.encoding" value="UTF-8" />  ,未解决问题. 3.web.xml中做如下确认和修改,未解决问题. <

hibernate设置mysql的timestamp默认值技巧

首先,要想使用数据库中配置的默认值就必须不让hibernate覆盖了默认值,需要配置property insert="false" update="false",告诉hibernate不对该属性执行insert.update操作,这要就不会覆盖我们在数据库中配置的默认值了.除此之外,我们还需要配置hibernate对该表的操作,dynamic-insert="true" dynamic-update="true", 实现动态的

hibernate 中mysql的id生成策略

数据库的规划和操作号码大全中,咱们一般会给表建立长尾关键词挖掘工具的主键. 主键,可以分为天然主键和署理主键. 天然主键表明:选用具有事务逻辑意义的字段作为表的主键.比方在用户信息表中,选用用户的身份证号码作为主键.可是这样一来,跟着事务逻辑的变化,主键就有可能要更改.比方,假定哪天身份证号码升级成19,2位,那....... 署理主键:在表中人为的添加一个字段,该字段并没有表明任何的事务逻辑,仅仅用来标识一行数据.比方说在用户信息表中,添加一个用户ID的字段.用来表明该条用户信息的记录. 一般

SQLQuery 实现别名映射

public List getQueryList(Map paramMap, int start, int maxResults) throws DataAccessException, HibernateException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { String woNo = ""; String woSubje

hibernate连接mysql,查询条件中有中文时,查询结果没有记录,而数据库有符合条件的记录(解决方法)

今天在另一台服务器上重新部署了网站,结果出现了以下问题: ——用hibernate做mysql的数据库连接时,当查询条件中有中文的时候,查询结果没有记录,而数据库中是存在符合条件的记录的. 测试了以下,发现不加条件查询可以查到,加上查询条件包含中文就无法找到记录. 百度发现,以下两篇文章很有帮助. http://gzxabcdefg.blog.163.com/blog/static/23451794201081554816892/ http://bbs.51cto.com/thread-1031

Hibernate SQLQuery简单实用,做链接查询

工单里面可能有0个告警,一个或多个告警,当工单中没有告警的时候也需要将工单显示出来,所以就需要使用工单和告警的做链接查询,下面是具体实例 表: CREATE TABLE `alarm` ( `id` bigint(20) NOT NULL DEFAULT '0', `title` varchar(20) DEFAULT NULL, `level` int(11) DEFAULT NULL, `customer_id` bigint(20) DEFAULT NULL, `work_sheet_id

一次hibernate+c3p0+mysql连接池java.net.SocketException: Connection reset故障的解决笔记

hibernate 有自带的连接池,但大家用起来颇有微词,因为其稳定性以及性能都不太好.c3p0 连接池的性能和稳定性久经考验,所以用 hibernate 的朋友一般都使用 c3p0 的连接池.那么是不是把 c3p0 的包导进来,然后 hibernate.cfg.xml 里把 c3p0 的各种属性加进来就万事大吉了呢?不见得,很可能你的项目上线以后,发现你的连接池不仅性能低下,而且可靠性差,c3p0 并没有表现出它传说中应该具有的那些特性.你在咒骂 c3p0 的可靠性以及高性能的时候,有没有想过