Hibernate 通过实体ManagerFactory注册SQL函数
在Hibernate中,我可以通过配置对象注册自定义SQL功能:Hibernate 通过实体ManagerFactory注册SQL函数,hibernate,jpa,Hibernate,Jpa,在Hibernate中,我可以通过配置对象注册自定义SQL功能: public void registerExtensions(Configuration config) { config.addSqlFunction("s_sum", new StandardSQLFunction("sum")); ... } 我希望将此配置从“遗留”Hibernate切换到JPA 我已经读过,我可以通过专门化那里的方言来注册SQL函数: 这不是我想做的 在构建实体管理器工厂时,是否有方法注
public void registerExtensions(Configuration config) {
config.addSqlFunction("s_sum", new StandardSQLFunction("sum"));
...
}
我希望将此配置从“遗留”Hibernate切换到JPA
我已经读过,我可以通过专门化那里的方言来注册SQL函数:
这不是我想做的
在构建实体管理器工厂时,是否有方法注册这些功能
我正在Spring4.1环境中运行Hibernate4.3。JPA通过
@namedquerys
和@NamedQuery
注释注册SQL。它们与实体放在同一个类中。请参阅Javadoc:
及
自Hibernate ORM 5.2.18和5.3.1以来,在使用JPA时注册SQL函数的最佳方法是提供如下代码:
public class SqlFunctionsMetadataBuilderContributor
implements MetadataBuilderContributor {
@Override
public void contribute(MetadataBuilder metadataBuilder) {
metadataBuilder.applySqlFunction(
"group_concat",
new StandardSQLFunction(
"group_concat",
StandardBasicTypes.STRING
)
);
}
}
您可以通过Hibernate.metadata\u builder\u contributor配置属性将其传递到Hibernate:
<property>
name="hibernate.metadata_builder_contributor"
value="com.vladmihalcea.book.hpjp.hibernate.query.function.SqlFunctionsMetadataBuilderContributor"
</property>
name=“hibernate.metadata\u builder\u contributor”
value=“com.vladmin.book.hpjp.hibernate.query.function.sqlfunctionsmetatabuilderContributor”
您可能读过一些文章,告诉您通过扩展Hibernate方言来注册SQL函数,但这是一个幼稚的解决方案。有关避免扩展方言的更多详细信息,请阅读
恐怕那不是我需要的。我们的目标是用新函数扩展hql,如本文所解释的,您链接到的原始帖子所说的扩展方言类。你试过了吗?我很想知道示例和/或用例。我想避免扩展方言,因为我的应用程序可以运行多个RDBMS。我必须用几乎相同的代码扩展几种方言。我想你可以得到Hibernate会话工厂并使用它?你不能,因为JPA没有这样的机制。在坚持这样做时,您总是将代码绑定到一个实现上。
public class SqlFunctionsMetadataBuilderContributor
implements MetadataBuilderContributor {
@Override
public void contribute(MetadataBuilder metadataBuilder) {
metadataBuilder.applySqlFunction(
"group_concat",
new StandardSQLFunction(
"group_concat",
StandardBasicTypes.STRING
)
);
}
}
<property>
name="hibernate.metadata_builder_contributor"
value="com.vladmihalcea.book.hpjp.hibernate.query.function.SqlFunctionsMetadataBuilderContributor"
</property>