试图覆盖 Oracle10gDialect 并添加 over 和 partition 函数。我在hibernate.org上阅读了有关如何覆盖方言的信息。我正在使用 Hibernate 4.1.7.Final 并且无法升级。我按照指定的方式实现了它,但是我收到了这个错误。
15:21:21,353 WARN SqlExceptionHelper:143 - SQL Error: 907, SQLState: 42000
[10/8/13 15:21:21:354 CDT] 00000021 SystemOut O ORA-00907: missing right parenthesis
[10/8/13 15:21:21:354 CDT] 00000021 SystemOut O 15:21:21,354 ERROR SqlExceptionHelper:144 - ORA-00907: missing right parenthesis
这是我建立的课程:
package com.edmann.util;
import org.apache.log4j.Logger;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.StandardSQLFunction;
/**
* Because i need some analytic functions i am going to extend the
* oracle10gDialect so i can register my functions i want to use.
*
* @author Edward Mann
*
*/
public class Oracle10gDialectExtended extends Oracle10gDialect {
// get log4j handler
private static final Logger LOG = Logger
.getLogger(Oracle10gDialectExtended.class);
/**
* Override registerFunctions so that we can register the ones we want to
* use, then we will call the registerFunctions from the parent class.
*
*/
@Override
protected void registerFunctions() {
LOG.info("Trying to register custom functions");
registerFunction("over", new StandardSQLFunction("over"));
registerFunction("partition", new StandardSQLFunction("partition"));
super.registerFunctions();
}
}
这是我在 hbm.xml 文件中的条目:
<property name="rank" type="integer" formula="(ROW_NUMBER() over(partition by ENTRY_NUMBER ORDER BY ENTRY_DATE DESC))"/>
我面临的挑战是阻止休眠添加 this_。到分区。在我链接到的休眠论坛线程中,最后一个条目是一个有同样问题的人。我不确定 Hibernate Criteria 是否可以做到这一点。
谢谢你的帮助。
更新: 我找到了我添加的答案
registerKeyword("partition");
到 registerFunctions 方法中的我的 Oracle10gDialectExtended 类,它现在按预期工作。