Hibernate异常汇总
作者:luckystar
日期:
1.unexpected token: (
异常信息如下:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 117 [SELECT t.goodsid,t.shopid,t.goodsname,t.contents,t.remark,p.picurl,m.price,m.gtype,m.total FROM t_goods t left join (select goodsid,picurl from t_picture group by GOODSID) p on p.goodsid = t.goodsid left join t_model m on m.goodsid = t.GOODSID where t.shopid = :shopid and t.status = 1 ORDER BY t.createtime DESC]
sql如下:
SELECT
t.goodsid,
t.shopid,
t.goodsname,
t.contents,
t.remark,
p.picurl,
m.price,
m.gtype,
m.total
FROM
t_goods t
left join (select goodsid,picurl from t_picture group by GOODSID) p on p.goodsid = t.goodsid
left join t_model m on m.goodsid = t.GOODSID
where t.shopid = :shopid
and t.status = 1
ORDER BY
t.createtime DESC;
报这个错,主要是因为我用的Query,非SQLQuery。
Query query = sessionFactory.getCurrentSession().createQuery(sql);
2.No Dialect mapping for JDBC type: -1
出现这个问题的原因是 通过 Hibernate createSQLQuery() 方法进行查询,对应表中的列有 text类型的,方言导致的。
解决方法:自已建一个方言,继承于MySQLDialect ,引入
registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
然后将hibernate注册的方言改成自己的。如:
com.unix360.util.BlobMySQLDialect
代码如下:
package com.unix360.util;
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;
public class BlobMySQLDialect extends MySQLDialect {
public BlobMySQLDialect(){
super();
registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
}
}
作者:qincidong
出处:http://qincidong.github.io/blog/2015/01/13/hibernate-exception.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
出处:http://qincidong.github.io/blog/2015/01/13/hibernate-exception.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。