如何使用Hibernate调用自定义数据库函数?
如果我在数据库中定义一些函数(也许是Postgres,或任何其他数据库):
create or replace function isValidCookie(ckie);
我将它从SQL称为:
select * from cookietable c where isValidCookie(c.cookie);
如何从Hibernate调用这样的自定义函数?
如果我在数据库中定义一些函数(也许是Postgres,或任何其他数据库):
create or replace function isValidCookie(ckie);
我将它从SQL称为:
select * from cookietable c where isValidCookie(c.cookie);
如何从Hibernate调用这样的自定义函数?
如果要在 HQL 中使用自定义函数,则需要使用适当的方言定义它
看看PostgreSQLDialect(或任何其他,真的)源代码,你会看到一堆registerFunction()调用。您需要再添加一个 :-) - 用于您自己的自定义函数。
然后,您必须在 Hibernate 配置中指定自己的方言。
从Hibernate 5开始,如果您不想依赖或自定义方言,则可以定义MetadataBuilderInitializer
。例如,要将 MySQL 与 from HQL 结合使用,您可以定义一个名为:DATE_ADD
INTERVAL
date_add_interval
public class DateAddIntervalMetadataBuilderInitializer
implements MetadataBuilderInitializer {
@Override
public void contribute(MetadataBuilder metadataBuilder,
StandardServiceRegistry serviceRegistry) {
metadataBuilder.applySqlFunction("date_add_interval",
new SQLFunctionTemplate(DateType.INSTANCE,
"DATE_ADD(?1, INTERVAL ?2 ?3)"));
}
}
您还需要将类的名称放在名为 的 JAR 资源文件中。META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer
当通过 JPA 和/或 Spring 等框架使用 Hibernate 时,此方法特别有用,其中配置由框架隐式执行。