UDF在Hibernate中

时间:2014-03-18 09:07:22

标签: java mysql hibernate


我再次感到困惑......我确信我的问题有一个简单的答案。

我已经用MySQL实现了一个UDF,即计算中位数。
我的问题是;我如何"告诉" Hibernate MySQL包含中值函数,而不是返回错误?

  

[IllegalStateException:节点没有数据类型:org.hibernate.hql.internal.ast.tree.MethodNode - [METHOD_CALL] MethodNode:'(' + - [METHOD_NAME] IdentNode:&#39 ; MEDIAN' {originalText = MEDIAN} - [EXPR_LIST] SqlNode:' exprList' - [DOT] DotNode:' elk0_.weight' {propertyName = weight,dereferenceType = PRIMITIVE,getPropertyPath = weight,path = {synthetic-alias} .weight,tableAlias = elk0_,className = models.Elk,classAlias = null} + - [IDENT] IdentNode:' {synthetic-alias}' {originalText = {synthetic-alias}} - [IDENT] IdentNode:' weight' {originalText = weight}]

1 个答案:

答案 0 :(得分:1)

您必须创建一个包含新功能的新类。这个类将扩展你当前的方言,MYSQL5Dialect。

 public class CustomMySQLDialect extends MySQL5Dialect{
   public CustomMySQLDialect()
   {
          super();
          registerFunction("median", new StandardSQLFunction("median"));
   }
}

现在你必须告诉hibernate使用你新创建的方言。我假设你有一个配置了hibernate的XML文件。

 <property name="hibernate.dialect">com.hibernate.custom.dialect.CustomMySQLDialect</property>

有关详细信息,请查看Keyur Joshi blog post