java – JPA Criteria Builder:如何将ArrayList传递给Oracle函
发布时间:2020-12-15 03:01:56 所属栏目:Java 来源:网络整理
导读:我有一个Oracle函数,它接受一个POINTS%ROWTYPE表.我想使用CriteriaBuilder类从JPA调用此函数,该类具有数据库函数的功能.当我尝试构建查询时,它死于抱怨ArrayLists不是函数的有效查询参数. 如何将ArrayList从JPA传入Oracle函数? Oracle函数签名: CREATE OR
我有一个Oracle函数,它接受一个POINTS%ROWTYPE表.我想使用CriteriaBuilder类从JPA调用此函数,该类具有数据库函数的功能.当我尝试构建查询时,它死于抱怨ArrayLists不是函数的有效查询参数.
如何将ArrayList从JPA传入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<FilterPoint> 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次.)然后我想将该数组点传递回函数进行处理. 我需要使用条件构建器,这个函数只是查询的一部分. 谢谢你的帮助. 解决方法
这可能有所帮助.如
here所述,用户定义的TABLE类型的适当Java类型是java.sql.Array.我想你需要将你的列表转换成这种类型.一种可行的方法,只需在连接上调用
method createArrayOf(另请参见本
answer):
Session session = (Session)em.getDelegate(); Connection conn = session.connection(); String[] data = points.toArray(new FilterPoint[points.size()]); java.sql.Array sqlArray = conn.createArrayOf(typeName,data); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |