当前位置:  开发笔记 > 编程语言 > 正文

JPA Criteria Builder:如何将ArrayList传递给Oracle函数?

如何解决《JPACriteriaBuilder:如何将ArrayList传递给Oracle函数?》经验,为你挑选了0个好方法。

我有一个Oracle函数,它接受一个POINTS%ROWTYPE表.我想使用CriteriaBuilder类从JPA调用此函数,该类具有数据库函数的功能.当我尝试构建查询时,它会死于抱怨ArrayLists不是函数的有效查询参数.

如何将ArrayList中的ArrayList传入Oracle函数?

Oracle函数签名:

CREATE OR REPLACE FUNCTION LOCATION_CONTAINS
(
LATITUDE_IN IN DOUBLE PRECISION,
LONGITUDE_IN IN DOUBLE PRECISION,
points IN types_pkg.point_array,
numPoints IN INTEGER
) 

Oracle类型:

create or replace package types_pkg
as
type point_array is table of FILTERPOINT%ROWTYPE;
end types_pkg;

JPA Criteria Builder调用

List points = getPoints(location_name);
int numPoints = points.size();

Expression ex =
           cb.function( "LOCATION_CONTAINS",
           Integer.class,
           entity.get( "latitude" ),
           entity.get( "longitude" ),
           cb.literal( points ),
           cb.literal( numPoints ) );

例外:

org.apache.openjpa.persistence.ArgumentException: 
The specified parameter of type "class middle.ware.FilterPoint" is not a valid query parameter.

本质上,我想在函数调用之外获取一个点数组,所以我只需要获取一次(现在我在函数调用中执行select,所以每次调用函数时它都会运行,这可能是100,000' s次.)然后我想将该数组点传递回函数进行处理.

我需要使用条件构建器才能将此函数作为查询的一部分.

谢谢你的帮助.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有