关键词:
【中文标题】使用 JPA 和 Hibernate 注册 SQL 函数【英文标题】:Registering a SQL function with JPA and Hibernate 【发布时间】:2012-09-03 00:48:37 【问题描述】:我想知道向 JPA/Hibernate 注册自定义 SQL 函数的最佳方法是什么。
我必须通过扩展 MysqlInnodb 方言还是有更好的方法?
谁能提供代码示例和相关文档的指针?
【问题讨论】:
此方法在 SQL Server 自定义方言中不起作用。提出问题***.com/questions/64905785/… 【参考方案1】:是的,扩展方言是注册自定义 SQL 函数的好方法。
在您的方言类构造函数中添加类似的内容。
registerFunction("current_timestamp", new NoArgSQLFunction(Hibernate.TIMESTAMP) );
registerFunction("date", new StandardSQLFunction(Hibernate.DATE) );
查看现有方言类之一的源代码。 http://www.koders.com/java/fid0E7F787E2EC52F1DA8DFD264EDFBD2DE904A0927.aspx
【讨论】:
我必须创建一个新类并扩展现有的方言还是有其他更简单的方法? 是的,创建一个扩展现有方言类的新类。使用你的类作为休眠配置中的方言类。 谢谢!另外:Interesting and relevant link【参考方案2】:您可能会阅读文章告诉您通过扩展 Hibernate Dialect
来注册 SQL 函数,但这是一个幼稚的解决方案。
从 Hibernate ORM 5.2.18 和 5.3.1 开始,注册 SQL 函数的最佳方式是提供 MetadataBuilderContributor
,如下所示:
public class SqlFunctionsMetadataBuilderContributor
implements MetadataBuilderContributor
@Override
public void contribute(MetadataBuilder metadataBuilder)
metadataBuilder.applySqlFunction(
"group_concat",
new StandardSQLFunction(
"group_concat",
StandardBasicTypes.STRING
)
);
您可以通过 hibernate.metadata_builder_contributor
配置属性将其传递给 Hibernate:
<property>
name="hibernate.metadata_builder_contributor"
value="com.vladmihalcea.book.hpjp.hibernate.query.function.SqlFunctionsMetadataBuilderContributor"
</property>
或者,如果您在本机引导 Hibernate,则可以在引导期间将 SQL 函数应用于 MetadataBuilder
。
【讨论】:
【参考方案3】:每个版本注册 SQL 方法
//Add Hibernate Properties
properties.put("hibernate.dialect",
"com.sparkslink.web.config.sql.RegisterSqlFunction");
//Create A Class
public class RegisterSqlFunction extends MySQLDialect
public RegisterSqlFunction()
super();
registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
//Dao Method
public List<Client> getTest()
Query query = getSession()
.createQuery("SELECT sl.name as name ,group_concat(sl.domain) as domain FROM SlClient sl GROUP BY sl.name");
query.setResultTransformer(Transformers.aliasToBean(Client.class));
return query.list();
//DTO Class
public class Client
private String name;
private String domain;
//Getter
//Setter
【讨论】:
使用存储过程、JPA 和 Hibernate 持久化到 SQL Server 2008
】使用存储过程、JPA和Hibernate持久化到SQLServer2008【英文标题】:PersistingtoSQLServer2008usingstoredprocedures,JPAandHibernate【发布时间】:2009-11-1809:30:57【问题描述】:我们正在实施一个网页来维护组织结构。该结构存储在SQLServer2008中并... 查看详情
使用 Hibernate 和 Spring Data JPA 激活 SQL 语句日志记录
】使用Hibernate和SpringDataJPA激活SQL语句日志记录【英文标题】:ActivateSQLstatementsloggingwithHibernateandSpringDataJPA【发布时间】:2018-06-0703:21:37【问题描述】:我有一个使用Hibernate作为提供者的SpringDataJPA存储库。我想记录SQL语句,但我... 查看详情
java示例代码_使用JPA/Hibernate自动注册实体:未知实体
java示例代码_使用JPA/Hibernate自动注册实体:未知实体 查看详情
Hibernate + JPA + jTDS + SQL Server = Unicode 问题
】Hibernate+JPA+jTDS+SQLServer=Unicode问题【英文标题】:Hibernate+JPA+jTDS+SQLServer=UnicodeProblems【发布时间】:2014-11-0208:49:51【问题描述】:我维护了一个作为Servlet运行的软件,可以使用MySQL、Oracle或SQLServer作为数据库后端-取决于客户想要... 查看详情
Spring 3.1 + Hibernate 4.1 JPA,Entity manager factory注册两次
】Spring3.1+Hibernate4.1JPA,Entitymanagerfactory注册两次【英文标题】:Spring3.1+Hibernate4.1JPA,Entitymanagerfactoryisregisteredtwice【发布时间】:2012-06-0715:19:09【问题描述】:我使用SpringFramework3.1和Hibernate4.1作为JPA提供程序,并且我有一个功能齐... 查看详情
java示例代码_在JPA/Hibernate中使用聚合函数调用SQL查询
java示例代码_在JPA/Hibernate中使用聚合函数调用SQL查询 查看详情
Spring JPA Hibernate 和 AttributeConverter
】SpringJPAHibernate和AttributeConverter【英文标题】:SpringJPAHibernateandAttributeConverter【发布时间】:2015-02-1208:18:27【问题描述】:我有一个小型应用程序(spring4.0、jpa2.1、hibernate5.0.2)并且一直在使用“旧”java.util.Date*类以及java.sql.Date... 查看详情
Hibernate和Spring数据jpa同时使用?
】Hibernate和Spring数据jpa同时使用?【英文标题】:SimultaneoususeofHibernateandSpringdatajpa?【发布时间】:2014-03-0711:03:56【问题描述】:是否可以同时使用SpringDataJPA(由Hibernate作为JPA提供者提供支持)和直接使用Hibernate?问题是当我使... 查看详情
如何在 JPA/Hibernate 中执行本机 SQL 脚本?
】如何在JPA/Hibernate中执行本机SQL脚本?【英文标题】:HowcanIexecuteanativeSQLscriptinJPA/Hibernate?【发布时间】:2012-12-3018:32:55【问题描述】:我有一个带有数据库转储的SQL脚本。如何使用Hibernate的EntityManager执行它?我是这样尝试的:... 查看详情
jpa是啥,和hibernate类似?
jpa是什么,和hibernate类似?1、JPA全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java类... 查看详情
如何使用 JPA 和 Hibernate 修复 StaleObjectStateException
】如何使用JPA和Hibernate修复StaleObjectStateException【英文标题】:HowtofixStaleObjectStateExceptionwithJPAandHibernate【发布时间】:2014-10-2106:26:18【问题描述】:控制器逻辑:defupdateObject()Objecto=Object.get(params.idasLong)o.otherObjects.clear()obje 查看详情
如何将继承策略与 JPA 注释和 Hibernate 混合使用?
】如何将继承策略与JPA注释和Hibernate混合使用?【英文标题】:HowtomixinheritancestrategieswithJPAannotationsandHibernate?【发布时间】:2011-04-2407:44:00【问题描述】:根据Hibernate参考文档,在使用Hibernate的XML元数据时应该可以混合不同的继... 查看详情
如何使用 Hibernate 和 JPA 处理填充下拉列表?
】如何使用Hibernate和JPA处理填充下拉列表?【英文标题】:HowtohandlepopulatingdropdownwithHibernateandJPA?【发布时间】:2021-06-0710:18:56【问题描述】:大家好,我正在通过一个简单的项目学习Hibernate和JPA,该项目允许用户编辑MySQL数据库... 查看详情
Hibernate 和 JPA 有啥区别?
】Hibernate和JPA有啥区别?【英文标题】:WhatarethedifferencesbetweenHibernateandJPA?Hibernate和JPA有什么区别?【发布时间】:2011-08-0610:31:51【问题描述】:当我在大学学习网络编程时,他们向我们介绍了休眠。我们使用了一段时间,我什... 查看详情
hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)
】hibernate/JPA中的@PreUpdate和@Prepersist(使用会话)【英文标题】:@PreUpdateand@Prepersistinhibernate/JPA(usingsession)【发布时间】:2011-05-0704:56:12【问题描述】:我遇到了一个向现有项目添加修复程序的阻止程序。主要问题是我想在POJO中... 查看详情
Spring、Spring Security、JPA、MySQL、Hibernate 配置
】Spring、SpringSecurity、JPA、MySQL、Hibernate配置【英文标题】:Spring,SpringSecurity,JPA,MySQL,HibernateConfiguration【发布时间】:2020-08-0606:22:21【问题描述】:我正在开发一个使用springsecurity、hibernate、JPA、mySQL的项目...我正在尝试让我的注... 查看详情
使用JPA和Hibernate时JOIN和JOIN FETCH有啥区别
】使用JPA和Hibernate时JOIN和JOINFETCH有啥区别【英文标题】:WhatisthedifferencebetweenJOINandJOINFETCHwhenusingJPAandHibernate使用JPA和Hibernate时JOIN和JOINFETCH有什么区别【发布时间】:2013-06-3003:48:19【问题描述】:请帮助我了解在哪里使用常规JOIN... 查看详情
如何使用 JPA 和 Hibernate 设置默认查询超时?
】如何使用JPA和Hibernate设置默认查询超时?【英文标题】:HowtosetadefaultquerytimeoutwithJPAandHibernate?【发布时间】:2011-01-0706:30:28【问题描述】:我正在使用Hibernate对我的数据库进行一些大型查询,但有时会遇到超时。我想避免在每... 查看详情