关于 Hibernate 的 SQLFunctionTemplate 的问题

红薯 发布于 2009/04/13 11:55
阅读 1K+
收藏 3

在 MySQL 中可以通过使用 Convert ( field using GBK) 来对字符串的字符集做转换,这样可以按照拼音顺序对字符串进行排序。详情请看 这里

但是如果在 Hibernate 中要使用这个函数就出现 HQL 语法错误,例如

FROM UserBean ORDER BY CONVERT(name using gbk) LIMIT 10;

于是我实在扩展一下 MySQL 的方言类如下:

/**
 * MySQL扩展方言
 * @author Winter Lau
 */
public class MySQLExtendDialect extends MySQLDialect {
	public MySQLExtendDialect(){
		super();
		registerFunction("convert", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") );
		registerKeyword("using");
		registerKeyword("gbk");
	}
}

还是搞不定,报错信息是关于 using 关键字的

严重: line 1:37: unexpected token: USING

可否有人有解的?实在不行只能用 sql-query 来写 SQL 了。

加载中
0
黄平俊
黄平俊

Hibernate不支持呀~~!

0
红薯
红薯

终于搞定了此问题,原来HQL支持的语法就要简单许多!

解决办法

1. 新增函数 convert_gbk , 用法 convert_gbk(name) : FROM UserBean ORDER BY convert_gbk(name) LIMIT 10;
2. Dialect 类改为:

registerFunction("convert_gbk", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") );

0
黄平俊
黄平俊

Cool   您太有才了~~~

0
JavaGG
JavaGG

good!!!!!

好久没有用hibernate了

0
B
BillCheung

引用来自#3楼“红薯”的帖子

终于搞定了此问题,原来HQL支持的语法就要简单许多!

解决办法

1. 新增函数 convert_gbk , 用法 convert_gbk(name) : FROM UserBean ORDER BY convert_gbk(name) LIMIT 10;
2. Dialect 类改为:

registerFunction("convert_gbk", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") );

 改成这样就明白了。

0
e
elvi

搞死我了,原来这个东西还要在hibernate.cfg.xml中配置一下~~~

<property name="dialect">org..utils.MySQLExtendDialect</property>

返回顶部
顶部