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