2013-08-07 93 views
-1

我使用JPA2如何計算的週年日在JPQL

我可以在以下way

例如,爲了找出週年兩年微軟的Access質疑它:

SELECT DATEADD(year, 2, initialdate) AS Anniv 

或者找出從最初的日期多少年過去了:

SELECT DATEDIFF(year, initialdate, GETDATE()) AS YearsPassed 

我無法找到功能DATEADD在JPQL

能有人幫我獲得類似的效果在JPQL

+0

Datediff對於計算已經過去的年份來說確實很糟糕。 –

+0

JPQL支持的sql函數:http://www.datanucleus.org/products/datanucleus/jpa/jpql_functions.html –

回答

2

Hibernate的Session提供了一個doWork()方法,讓您能夠java.sql.Connection直接訪問。然後您可以創建並使用java.sql.CallableStatement來執行您的功能。

下面是一個OracleDB的功能,例如:

session.doWork(new Work() { 
    public void execute(Connection connection) throws SQLException { 
    CallableStatement call = connection.prepareCall("{ ? = call MYSCHEMA.MYFUNC(?,?) }"); 
    call.registerOutParameter(1, Types.INTEGER); // or whatever it is 
    call.setLong(2, id); 
    call.setLong(3, transId); 
    call.execute(); 
    int result = call.getInt(1); // propagate this back to enclosing class 
    } 
}); 

或者你計算這個你PROGRAMM邏輯中。