我正在实现一个PL / SQL支持的实体对象,根据Oracle文档“使用Oracle应用开发框架开发Fusion Web应用程序”第4章中的说明。
但是,与文档示例不同,我的实体对象包含一个自定义Oracle数据库集合类型的列。即,
create or replace type verp_vps_location_quantity_t as object ( location_type VARCHAR(15), location_key VARCHAR2(3), quantity NUMBER(5,0) );
create or replace type verp_vps_location_quantity_tab as table of verp_vps_location_quantity_t;
Entity Object向导为VERP_VPS_LOCATION_QUANTITY_T创建了一个Domain对象,但没有为VERP_VPS_LOCATION_QUANTITY_TAB创建。我不确定这是否重要。
该实体在JDeveloper中的Application Module tester中运行良好。但它在我重写的EntityImpl类中失败,该类调用“doSelect()”的PL / SQL处理程序。问题取决于我如何尝试从CallableStatement
获取VERP_VPS_LOCATION_QUANTITY_TAB类型值。
(A)如果我试试这个:
Object array = cs.getArray(parameterPosition);
...我得到oracle.sql.Array
的实例,而ADF框架期望并且需要实体行属性值为oracle.jbo.domain.Array
的实例。
(B)如果我试试这个:
Map<String, Class<? extends Object>> typeMap = new HashMap<String, Class<? extends Object>>();
typeMap.put(pmd.sqlObjectTypeName, oracle.jbo.domain.Array.getORADataFactory().getClass());
Object array = cs.getObject(parameterPosition, typeMap);
...我得到IllegalAccessException
。
所以,基本上,我试图调用Oracle PL / SQL包并检索OUT
参数作为oracle.jbo.domain.Array
的实例。我该怎么做?