我使用的是带有如下定制方言的PostgreSQL 12和Hibernate5.6.8:
registerFunction("hstore_find", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "(?1 -> ?2 = ?3)"));
当我尝试迁移到Hibernate6.0.0时,RegisterFunction和SQLFunctionTemplate不复存在。我如何将这个注册表函数移植到Hibernate6的新方法?
gv8xihay1#
在没有测试的情况下,我认为您需要在您的定制方言中使用以下内容:
@Override public void initializeFunctionRegistry(QueryEngine queryEngine) { BasicTypeRegistry basicTypeRegistry = queryEngine.getTypeConfiguration().getBasicTypeRegistry(); SqmFunctionRegistry functionRegistry = queryEngine.getSqmFunctionRegistry(); functionRegistry.registerPattern( "hstore_find", "(?1 -> ?2 = ?3)", basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN )); // ... }
可以仅用StandardBasicTypes.BOOLEAN替换basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN )。
StandardBasicTypes.BOOLEAN
basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN )
fsi0uk1n2#
下面的代码对我很有效(Hibernate 6.1.1最终版)。但是,该函数是通过MetadataBuilderContributor(示例:https://stackoverflow.com/a/51285944)添加的。此代码添加了PostgreSQL JSON函数@>:
MetadataBuilderContributor
@>
@Override public void contribute(MetadataBuilder metadataBuilder) { metadataBuilder.applySqlFunction( FIRST_JSON_VALUE_CONTAINS_THE_SECOND_FUNCTION, new PatternBasedSqmFunctionDescriptor( new PatternRenderer("(?1 @> ?2)"), null, null, null, null, FunctionKind.NORMAL, null ) ); }
可能需要调整PatternBasedSqmFunctionDescriptor的参数,例如FunctionReturnTypeResolver参数。
PatternBasedSqmFunctionDescriptor
FunctionReturnTypeResolver
2条答案
按热度按时间gv8xihay1#
在没有测试的情况下,我认为您需要在您的定制方言中使用以下内容:
可以仅用
StandardBasicTypes.BOOLEAN
替换basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN )
。fsi0uk1n2#
下面的代码对我很有效(Hibernate 6.1.1最终版)。但是,该函数是通过
MetadataBuilderContributor
(示例:https://stackoverflow.com/a/51285944)添加的。此代码添加了PostgreSQL JSON函数
@>
:可能需要调整
PatternBasedSqmFunctionDescriptor
的参数,例如FunctionReturnTypeResolver
参数。