请问Hibernate 的hql如何使用SQL SERVER 的自定义函数?

flyingcat123 发布于 2013/01/16 15:30
阅读 2K+
收藏 3

hql 中需要用到某个自定义函数,请问需要如何配置?

我在BAIDU里找到一个例子,是ORACLE的,说是要自定义方言。请问这个方言是在原有SQL SERVER方言上修改还是要新增?

1.创建自己的方言

public class DialectRegExp extends Oracle9iDialect{
public DialectRegExp(){
super();
this.registerFunction("my_xy", new SQLFunctionTemplate(new IntegerType(),"get_sal(?1)"));
}
}
?1代表第一个参数,?2代表第二个参数.详情见hibernate javadoc: 

org.hibernate.dialect.Dialect,
org.hibernate.dialect.function.SQLFunction,

org.hibernate.dialect.function.SQLFunctionTemplate



2.主配置文件注册自己的方言
<property name="hibernate.dialect">org.xl.DialectRegExp</property>
注意:
<property name="hibernate.query.substitutions">true=1,false=false</property>
这句是为了某些情况在特殊使用,在文档中有解释,意思是是否在hibernate中用1表示true,0表示false

3.调用,此时的my_xy就是自定义函数get_sal
Query q = se.createQuery("select my_xy(e.empno) from Emp e");
List list = q.list();
System.out.println(list.size());


get_sal过程:
create or replace function get_sal(eno number) return number
 is
  mysal emp.sal%type;
 begin
  if validate_emp(eno) then
   select sal into mysal from emp where empno=eno;
   return mysal;
  end if;
 end;

加载中
0
shuaia
shuaia
继承sqlserver方言,其他一样
0
f
flyingcat123
自己顶下。
0
池塘仙人
池塘仙人

你需要的是直接写sql

返回顶部
顶部