【问题标题】:Is it possible to call a Oracle Function with jpa @Query是否可以使用 jpa @Query 调用 Oracle 函数
【发布时间】:2015-10-29 13:30:16
【问题描述】:

是否可以从 jpa hibernate @Query 调用 Oracle 函数?

这对我有用:

@Query("SELECT NEW com.test.project.dto.ResultDTO(g,l.country,r.name) "
            + "FROM Items g, Service l, Service r, Service s"
            +" WHERE s.id = g.id" 
            +" AND s.location = l.name"
            +" AND s.serviceType = 'type'"
            +" AND l.serviceType = 'Location'"
            +" AND l.area = r.name" 
            +" AND r.serviceType = 'Region'")
    public ResultDTO[] name();

但我想在ResultDTO 的构造函数中调用一个带有两个参数的Oracle 函数。就像我会使用原生 SQL 一样。

在查询中添加:get_trans_lac(l.country, 'en')

@Query("SELECT NEW com.test.project.dto.ResultDTO(g, get_translation(l.country, 'en'),r.name) "
            + "FROM Items g, Service l, Service r, Service s"
            +" WHERE s.id = g.id" 
            +" AND s.location = l.name"
            +" AND s.serviceType = 'type'"
            +" AND l.serviceType = 'Location'"
            +" AND l.area = r.name" 
            +" AND r.serviceType = 'Region'")
    public ResultDTO[] name();

有没有办法做到这一点?

我在应用程序启动时得到一个 Nullpointer。

这个: SELECT NEW com.test.project.dto.ResultDTO(g, FUNCTION(get_translation, l.country, 'en'),r.name) 还提供了一个空指针

【问题讨论】:

    标签: java spring oracle hibernate jpa


    【解决方案1】:

    我自己没有尝试过,但是在JPQL(JPA 2.1及更高版本,JPA 2.1之前的FUNC)中似乎有一个叫做FUNCTION(functionName, parameters, ...)的东西,它会调用一个native函数。

    所以查询中的第一行是:

    SELECT NEW com.test.project.dto.ResultDTO(g, FUNCTION('get_translation', l.country, 'en'),r.name)
    

    【讨论】:

    • 感谢您的回答,但得到了相同的结果:java.lang.IllegalArgumentException: Validation failed for query for method...Caused by: java.lang.NullPointerException。还有其他解决方案吗?
    • 看起来FUNCTION 可能是一个 EclipseLink 唯一的东西。对不起。当使用标准 API 时,CriteriaBuilder 接口中定义了一个方法,function,它插入了对数据库函数的调用。由于接口定义中存在这一点,因此人们会认为 JPQL 中应该提供相同的功能。
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2018-02-02
    • 2016-09-08
    • 1970-01-01
    • 2012-01-15
    • 2019-06-05
    相关资源
    最近更新 更多