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))"/>
私が抱えている課題は、hibernate が this_ を追加しないようにすることです。パーティションに。私がリンクした休止状態のフォーラム スレッドでは、最後のエントリは同じ問題を抱えている人でした。これが Hibernate Criteria でも可能かどうかはわかりません。
助けてくれてありがとう。
更新: 追加した答えが見つかりました
registerKeyword("partition");
registerFunctions メソッドの Oracle10gDialectExtended クラスに対して、期待どおりに動作するようになりました。