jsi*_*ght 13 java sql hibernate hql
如果我要在数据库中定义一些函数(可能是Postgres,或任何其他数据库):
create or replace function isValidCookie(ckie);
Run Code Online (Sandbox Code Playgroud)
我会从SQL中将其称为:
select * from cookietable c where isValidCookie(c.cookie);
Run Code Online (Sandbox Code Playgroud)
如何从Hibernate调用这样的自定义函数?
Chs*_*y76 13
如果要在HQL中使用自定义函数,则需要在适当的Dialect中定义它
看看PostgreSQLDialect(或其他任何真正的)源代码,你会看到一堆registerFunction()调用.您需要再添加一个:-) - 用于您自己的自定义功能.
然后,您必须在Hibernate配置中指定自己的方言.
从 Hibernate 5 开始,如果您不想依赖或自定义方言,您可以定义一个MetadataBuilderInitializer. 例如,要将 MySQLDATE_ADD与INTERVALfrom HQL一起使用,您可以定义一个名为 的自定义函数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)"));
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要将类的名称放在名为 .jar 的 JAR 资源文件中META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer。
这种方法在通过框架(如 JPA 和/或 Spring)使用 Hibernate 时特别有用,其中配置由框架隐式执行。
| 归档时间: |
|
| 查看次数: |
16809 次 |
| 最近记录: |