2017-08-24 88 views
1

我正在運行一個使用Spring Boot + Spring Data JPA進行持久化的簡單應用程序。Spring Data JPA調用Oracle函數

下面是一個示例Oracle函數我希望在Service實現類中返回值。

CREATE OR REPLACE PACKAGE PKG_TEST AS 
    FUNCTION HELLO_WORLD(TEXT VARCHAR2) RETURN VARCHAR2; 
END PKG_TEST; 

CREATE OR REPLACE PACKAGE BODY PKG_TEST AS 
    FUNCTION HELLO_WORLD(TEXT VARCHAR2) RETURN VARCHAR2 IS 
    BEGIN 
    RETURN 'HELLO WORLD ' || TEXT; 
    END; 
END PKG_TEST; 

無框架做這將是簡單的,但項目被內置到春季啓動JPA,所以最好使用它。

我需要參考指南鏈接或簡單的基礎結構。 我搜索了所有關於SO和Spring Data JPA的參考資料,我發現的所有例子都是針對CRUD和存儲過程的,對於函數沒有任何用處。

我試圖使用爲功能修改的存儲過程示例,但沒有工作。

+0

我不認爲這是對SQL功能的支持,有辦法叫他們但不能創建並存儲爲據我所知。 JPA規範沒有javadoc這樣的合約,我懷疑它是由任何持久化提供者實現的 –

回答

0

如果您正在使用Hibernate作爲JPA提供商可以創建自定義的方言和註冊所需的功能。

public class CustomDialect extends Oracle10gDialect { 
    public CustomDialect() { 
     super(); 
     // CustomFunction implements SqlFunction 
     registerFunction("custom_function", new CustomFunction()); 
     // or use StandardSQLFunction; useful for coalesce 
     registerFunction("coalesce", new StandardSQLFunction("coalesce")); 
    } 
}