Wso2 如何避免自定义数据源复杂结果中的嵌套查询链?

Wso2 如何避免自定义数据源复杂结果中的嵌套查询链?,wso2,wso2dss,Wso2,Wso2dss,我正在为WSO2 DSS开发一个自定义数据源,以便在数据服务上使用JPA实体和JPQL 我所取得的成就: 我有一个作为JNDI公开的数据源,我的持久化单元通过init params接收它,所以我使用JTA-data-source连接到它; 所有JPA本机查询都可以正常工作,从实体e中选择e,其中..,更新,删除; 我使用REST示例为动态查询开发了一种自定义JSON语言:{u query:{field1:{{u like:foo%},field2:{u in:[1,2,3]}; 查询解码和Jav

我正在为WSO2 DSS开发一个自定义数据源,以便在数据服务上使用JPA实体和JPQL

我所取得的成就:

我有一个作为JNDI公开的数据源,我的持久化单元通过init params接收它,所以我使用JTA-data-source连接到它; 所有JPA本机查询都可以正常工作,从实体e中选择e,其中..,更新,删除; 我使用REST示例为动态查询开发了一种自定义JSON语言:{u query:{field1:{{u like:foo%},field2:{u in:[1,2,3]}; 查询解码和Java反射用于将JPA结果对象和对象[]转换为数据行; BeanValidation在执行后抛出DataServiceFault; 为了保护实体引用的安全,反射用于在提交之前刷新所有实体引用。 场景:与SQL不同,JPA结果不是行。它是实体,JPA实体可以是非常复杂的对象链。 目前,DSS中使用嵌套查询手动处理一对多JPA实体。这可能会给数据服务的开发过程带来困难。 我预测在很多情况下,由于实体的关系链,我们将有一个嵌套链

我想在WSO2 core中不做任何修改的情况下,返回这个复杂的实体链,使用渴望类型获取它。现在我认为这是不可能的,因为DataRow接口方法getValueAtString column返回一个字符串,而在我的情况下应该返回一个字符串数组

看看这个DBS示例查询:

从城市c中选择c 通过一点反射,我将JPQL结果对象转换成了一个映射,因此FixedDataRow可以工作,但当我有多个人时,c.person.id键会被覆盖。在这种情况下,嵌套查询可以解决问题,但我不希望有两个元素,因为JPA返回的3D元素与返回2D对象的SQL行不同

请查看此示例城市对象:

{ c、 id:1, c、 姓名:傅,, c、 代码:999, c、 人员:[ { c、 个人识别号:1, c、 姓名:Bar }, { c、 个人识别号:2, c、 姓名:Ano } ] } 查看为什么getValueAtString列返回应该是列表或映射

这方面的DBS应该是这样的:

从城市c中选择c 我找到了一个名为arrayName的元素属性。它可能有助于自定义,但我不知道如何使用它:


问题:如何在不修改WSO2核心源代码的情况下开发它,避免上述嵌套查询链并简化数据服务开发?

我想您需要类似中所述的内容


FixedDataRow映射需要columnName-value-pair的映射作为构造函数参数。

Yes@Rajith类似,但当复杂元素中只有一个结果时,它可以正常工作。当我有多个结果时,我应该使用嵌套查询,因为FixedDataRow不接受多值映射,这就是我需要的复杂元素吗不带嵌套查询的多值t,但我认为这是不可能的。