如何从 spring 引导应用程序调用 oracle 函数?

How to call oracle function from spring boot application?

我的要求是我需要从 spring 引导应用程序调用 oracle 函数而不使用 NATIVE 查询。

下面是我的 oracle 函数,它将 Date 作为输入

create or replace FUNCTION todate(src_dt IN date) 
 RETURN date
 is
  BEGIN 
  RETURN(to_date(src_dt)); 
  END;

我在互联网上搜索解决方案,但到目前为止没有找到。人们说一些自定义方言需要创建,但没有找到任何完美的逐步 link。

下面是我的 java 代码:-

 Query query1 = entityManager.createQuery("select todate(ActSubT.createdDt) from ActSubT ActSubT");
    List<Object> result=query1.getResultList();

这段代码应该 运行 ,截至目前,它给出的错误是 oracle 函数,我还没有在 application.yml 文件中配置任何东西。

我收到以下错误

  java.lang.IllegalArgumentException: org.hibernate.QueryException: 
  No data type for node: 
 org.hibernate.hql.internal.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
  +-[METHOD_NAME] IdentNode: 'todate' {originalText=todate}

请帮忙

我能够解决我的问题。

第 1 步:- 我创建了自定义方言,下面是我的代码..

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

第 2 步:- 现在我正在调用 todate 函数,下面是 Java 代码

Query query1 = entityManager.createQuery("select function('todate',ActSubT.createdDt) from ActSubT ActSubT where ActSubT.id=1105619");

        Object resulth=query1.getSingleResult();

第 3 步:- 我们需要将此条目放入 application.poperties / application.yml

# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect = com.sbill.app.config.CustomDialect

这就是全部,现在我可以使用 java 代码调用 db 函数了。