首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在hibernate中调用返回varchar的mysql函数

问在hibernate中调用返回varchar的mysql函数
EN

Stack Overflow用户
提问于 2011-12-02 19:34:20
回答 3查看 5K关注 0票数 2

我正在尝试使用hibernate中的mysql find_in_set字符串函数,但不幸的是我无法使用它,甚至尝试创建这些注册函数。

代码语言:javascript
复制
registerFunction("findInSet",newSQLFunctionTemplate(Hibernate.STRING,"FIND_IN_SET(?1,?2)"));
registerFunction("findInSet",newSQLFunctionTemplate(Hibernate.INTEGER,"FIND_IN_SET(?1,?2)"));
registerFunction("findInSet",new StandardSQLFunction("find_in_set", Hibernate.INTEGER));

使用mysql方言,但没有人是working..can的,请告诉我如何使用hibernate中的mysql字符串函数。或对上述寄存器函数的任何更改。

提前谢谢你,

最好的问候,Raja。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-23 16:17:08

通过扩展mysqldialect创建了一个类,如下所示

代码语言:javascript
复制
public class MySqlDialectExtended extends MySQLDialect {

public MySqlDialectExtended() {
    super();
    registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
    registerFunction("date_sub_interval", new SQLFunctionTemplate(Hibernate.DATE, "DATE_SUB(?1, INTERVAL ?2 ?3)"));
    registerFunction("weekofyear", new StandardSQLFunction("weekofyear", Hibernate.INTEGER));
    registerFunction("group_concat", new StandardSQLFunction("group_concat", Hibernate.STRING));
}

}

并像这样在查询中使用它

代码语言:javascript
复制
new Query(" >= date_sub_interval(CURRENT_DATE(),1, DAY)");
票数 0
EN

Stack Overflow用户

发布于 2011-12-02 20:48:24

如果您的函数返回一个string or varchar ,那么调用函数就很简单。

session.createSQLQuery("select my_super_fn(:param1)")

其中,my_super_fn是带有参数param1的函数的名称。

要测试语法,请尝试以下代码,它将获得当前的服务器日期。

代码语言:javascript
复制
Date d = (Date)session.createSQLQuery("select CURDATE()").uniqueResult();
System.out.println(d);

有关其他类型的函数,请参考有关如何执行的问题here。

票数 1
EN

Stack Overflow用户

发布于 2016-11-07 02:43:46

这对我来说很有效:

代码语言:javascript
复制
package mypackage;

import org.hibernate.dialect.MySQL5InnoDBDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.BooleanType;

public class CustomSqlDialect extends MySQL5InnoDBDialect {
    public CustomSqlDialect() {
        registerFunction("find_in_set", new SQLFunctionTemplate(IntegerType.INSTANCE, "find_in_set(?1, ?2)");
    }
}

并在您的JPA配置文件中设置:

代码语言:javascript
复制
<property name="hibernate.dialect" value="mypackage.CustomSqlDialect"/>

最后,对于find_in_set,您应该确保查询条件为find_in_set(...) > 0。使用不带比较运算符的find_in_set()将无法执行,并出现AST错误。

此外,您应该明显地覆盖适当的方言和包名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8355719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档