当前位置: 首页 > 知识库问答 >
问题:

Spring 5 -在HQL使用未知的SQL函数

班承恩
2023-03-14

我试过在Spring和HQL中使用一些hibernate不支持的MySQL函数,比如GROUP_CONCAT。Hibernate会产生以下错误。

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
 +-[METHOD_CALL] MethodNode: '('
 |  +-[METHOD_NAME] IdentNode: 'GROUP_CONCAT' {originalText=GROUP_CONCAT}
 |  \-[EXPR_LIST] SqlNode: 'exprList'
 |     \-[DOT] DotNode: 'propertyre1_.id' {propertyName=id,dereferenceType=PRIMITIVE,getPropertyPath=id,path=property.id,tableAlias=propertyre1_,className=com.mypackage.MyClas,classAlias=property}
 |        +-[ALIAS_REF] IdentNode: 'propertyre1_.id' {alias=property, className=com.mypackage.MyClass, tableAlias=propertyre1_}
 |        \-[IDENT] IdentNode: 'id' {originalText=id}

但是,我发现Hibernate可以通过添加到Hibernate配置来配置为接受自定义函数…

hibernateConfiguration.addSqlFunction("group_concat", new StandardSQLFunction("group_concat", new StringType()));

不过,我正在努力寻找一种方法来访问Spring Boot的Hibernate配置

在Spring 5中构建会话工厂之前,有什么方法可以操作Hibernate配置吗?

共有1个答案

步德宇
2023-03-14

答案正是您所需要的:

https://stackoverflow.com/a/42486291/6709262

要将其与Spring Boot一起使用,只需在应用程序中启用它。(yml|属性):

spring.jpa.properties.hibernate.dialect = full.qualified.package.DialectName
 类似资料:
  • 问题内容: 我有这样的SQL查询 并试图像这样在hql中实现它, 并得到这样的错误 如何做到这一点?hql中对应的字符串函数是什么?是否有使用标准查询API的解决方案? 问题答案: 是的,不支持。请参阅API文档上HQL支持的功能列表。 现在您剩下了2个选项。 使用方法。 通过扩展和创建函数来创建自己的类。这是在hibernate论坛上说这里在博客中很好地解释这里。

  • 问题内容: 首先,这是分配的一部分。 我正在尝试使用COUNT函数作为与Northwind数据库有关的查询的一部分。查询应返回CustomerID,CompanyName和 为每个相应的客户下的订单数 。 当然,前两部分很简单,但是我无法让COUNT函数正常工作。到目前为止,我的查询是: 以这种方式使用COUNT的正确语法是什么?它看起来像: 到目前为止,所有示例都单独使用了COUNT函数,而不是

  • 我有一张这样的桌子: 我想加上宽限期分数,条件是每个学生的总宽限期分数最多为6分,如果候选人在EC1中的28分和EC2中的27分两个科目中不及格,那么在加上宽限期EC1=30和EC2=30后,他是通过的。如果他在EC1中有25分,在EC2中有28分,那么需要的宽限期分数是5 2=7。因此,他是不及格的,没有宽限期分数,宽限期分数可以添加到最多两个科目。如果他在两个科目中不及格,那么他是不及格的,没

  • 我的hql查询似乎有什么问题? 错误: 组织。冬眠hql。内部的ast。QuerySyntaxException:意外标记:第1行第263列附近的标记 我假设它是在谈论

  • 问题内容: 我有一个经典的ASP网站,正在逐步升级。我想创建一个函数来 安全地 更新SQL数据库,而无需手动指定参数。有点动态。 (我不想使用实体框架或Linq) 这是到目前为止的代码: 伪代码(我要实现的目标) 创建一个涵盖所有变量的Ilist {get; 设置:} [在此处验证类型/长度] 对于每个包含值的变量(无验证问题),请创建sql更新字符串。 执行它。 可能的问题: 我可以预见的唯一问

  • 本文向大家介绍Sql Server中REPLACE函数的使用,包括了Sql Server中REPLACE函数的使用的使用技巧和注意事项,需要的朋友参考一下 REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。 语法 REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3''