【问题标题】:How to call oracle function from spring boot application?如何从 Spring Boot 应用程序调用 oracle 函数?
【发布时间】:2019-08-16 11:31:27
【问题描述】:

我的要求是我需要在不使用 NATIVE 查询的情况下从 Spring Boot 应用程序调用 oracle 函数。

下面是我的以日期为输入的 oracle 函数

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

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

下面是我的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}

请帮忙

【问题讨论】:

  • @parthivrshah 我之前已经完成了这个答案,但我的要求是不使用 NATIVE 查询我需要调用 db 函数
  • 我不认为你可以在没有原生查询的情况下调用 db 函数
  • @parthivrshah 你能检查这个链接吗thoughts-on-java.org/database-functions 我们有选项,但我无法在我们的 yml 文件中配置自定义方言条目
  • 我从未尝试过。

标签: java oracle jpa createquery


【解决方案1】:

我能够解决我的问题。

第 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函数了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2017-06-21
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多