hibernate 註冊自定義函式
阿新 • • 發佈:2019-01-22
1.建立自己的方言
public class DialectRegExp extends Oracle9iDialect{
public DialectRegExp(){
super();
}
?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;
public class DialectRegExp extends Oracle9iDialect{
public DialectRegExp(){
super();
this.registerFunction("my_xy", new SQLFunctionTemplate(new IntegerType(),"get_sal(?1)"));
this.registerFunction("my_xy", new SQLFunctionTemplate(Hibernate.String,"get_ename(?1,?2)"));
}
?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;