2010-06-17 61 views
4

我想知道在Hibernate中是否可行:在编写HQL查询时,可以这样说:HQL中可以重写Hibernate的'like'运算符吗?

select foo from Foo where foo.barString like "%baz%" 

这个工作假定类Foo有一个名为barString的String属性。

现在,假设Foo作为bar类型的bar属性,但该bar具有众所周知的,规范的字符串表示形式。假定这是可以容易且快速地计算出来的东西(例如通过级联),但是存储在数据库中的是而不是。有没有一种方法来映射/修改类,这样就可以编写类似或者

select foo from Foo where foo.bar like "%baz%" 

select foo from Foo where foo.bar.toCanonicalString like "%baz%" 

甚至

select foo from Foo where toCanonicalString(foo.bar) like "%baz%" 

感谢 PH

+0

事情是HQL用于在数据库上运行查询,而不是Java对象本身。所以它必须以某种方式转换为SQL,你如何将一些通用的java方法转换为SQL?我会说你必须在SQL中代表'toCanonicalString',像'from Foo'这样的CONCAT(foo.bar,foo.something)像“%baz%”'。如果它不能被转换成SQL,那么Hibernate也不能自动执行它。 – serg 2010-06-17 15:39:07

+0

当然,如果可能的话,我一直在寻找一种在HQL级别进行翻译的方法。 (最后,显然,我必须向HQL解释函数) – phtrivier 2010-06-17 15:45:55

+0

您可以重新映射hql函数以生成不同的sql,例如, registerFunction(“substring”,new SQLFunctionTemplate(Hibernate.STRING,“substring(?1,?2,?3)”));但我不认为你可以在它们转换为sql之前操作这些属性。 – 2010-06-17 20:15:59

回答