调用一个mysql函数在hibernate中返回varchar
我试图在hibernate中使用mysql find_in_set
字符串函数但不幸的是我无法使用它甚至尝试通过创建这些寄存器函数
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));
使用mysqldialect但没有人工作..任何人请告诉我如何在hibernate中使用mysql字符串函数。 或对上述寄存器function的任何更改。
提前致谢,
最诚挚的问候,拉贾。
如果函数返回string or varchar
值 ,则调用函数很简单。
session.createSQLQuery("select my_super_fn(:param1)")
其中my_super_fn是带参数param1的函数名称。
要测试语法,请尝试使用此代码获取当前服务器日期。
Date d = (Date)session.createSQLQuery("select CURDATE()").uniqueResult(); System.out.println(d);
对于其他类型的function,请在此处提出有关如何执行此操作的问题。
通过扩展mysqldialect创建了一个类,如下所示
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)); }
}
并在查询中使用它
new Query(" >= date_sub_interval(CURRENT_DATE(),1, DAY)");
这对我有用:
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配置文件中设置:
最后,对于find_in_set
您应该确保查询条件是find_in_set(...) > 0
。 使用不带比较运算符的find_in_set()
将无法执行AST错误。
此外,您显然应该覆盖适当的方言和包名称。
- java.lang.NoClassDefFoundError:设置了org / hibernate / Session hibernate jars
- 使用PostgreSQL中的Schema的Hibernate和多租户数据库
- 我们如何使用Hibernate和JPA调用存储过程?
- 如何在hibernate上指定Double的精度?
- java web应用程序布局,请解释一些设计原则/模式
- 带有ManyToOne的JPA Composite键获取org.hibernate.PropertyAccessException:无法通过reflection设置器设置字段值
- 使用什么冲洗模式’自动’或’提交’
- BCrypt.checkpw()无效的盐版本exception
- hibernate 4.3.x – 加载所有实体注释类