Efter 2 dages lidelse og analyse af AST-behandling af dvalekildekode gav jeg endelig op !! =P .. Faktisk er der ikke en Oracle 11g Dialect tilgængelig endnu.
Så jeg ændrede strategien og løser den med følgende ændringer:
1. Opret følgefunktionen på Oracle-database
CREATE OR REPLACE FUNCTION INTERVAL_HOURS_AGO(HOURS_PARAM IN NUMBER)
RETURN DATE DETERMINISTIC
IS TIME_AGO DATE;
BEGIN
SELECT (SYSDATE - INTERVAL '1' HOUR * HOURS_PARAM) INTO TIME_AGO FROM DUAL;
RETURN(TIME_AGO);
END;
DETERMINISTISK TIP om funktion er meget vigtigt for at undgå ydeevneproblemer, når du bruger det på Where-Clausules. Mere info om det på linket:http://www.inside-oracle-apex.com/caution-when-using-plsql-functions-in-sql-statement/
2. Opret en brugerdefineret Oracle Dialect-klasse og registrer den nye funktion.
public class Oracle11gDialectExtended extends Oracle10gDialect {
public Oracle11gDialectExtended() {
super();
registerFunction("interval_hours_ago",
new StandardSQLFunction("INTERVAL_HOURS_AGO", StandardBasicTypes.DATE));
}
}
Så kald det bare på @Formel :
@Formula(" INTERVAL_HOURS_AGO( SHOW_LIMIT_HOURS ) ")
private Date showLimitDate;
Eller på HQL / NamedQuery :
select p from Product p
where p.createdAt > interval_hours_ago(60)