我再次感到困惑......我确信我的问题有一个简单的答案。
我已经用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}]
答案 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