java - 如何从 spring boot 应用程序调用 oracle 函数?

标签 java oracle jpa createquery

我的要求是我需要在不使用 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}

请帮忙

最佳答案

我能够解决我的问题。

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

关于java - 如何从 spring boot 应用程序调用 oracle 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523881/

相关文章:

sql - 如何在 Oracle 上使用 SQL 获取当前年份?

java - JPA更新多对多删除记录

java - throws 除了传播一个 checked Exception 之外还有其他作用吗?

sql - 甲骨文错误 : ORA-00900: invalid SQL statement

sql - 在 Oracle 中,如何在不创建存储过程的情况下将多行连接成一行?

java - 如何在 JSF/EJB 中使用 Eclipselink @Multitenant?

Java在IntelliJ中添加javax.persistence

java - Android Studio Project的Gradle守护程序无法启动

Java - 如何加密 WordPress 的密码?

java - 通过 printstream Java 写入文本文件时更改文本字体颜色