配置关系存储连接时,我可以从ActivePivot存储进行一对多连接吗



使用关系存储,是否可以从ActivePivot存储到连接存储进行一对多连接。假设我的ActivePivot存储连接到SOME_ID上的另一个存储,但其他存储的键是SOME_ID,SOME_TYPE。然后可能有:

AP_STORE SOME_ID | JOIN_STORE SOME_ID | JOIN_STORE SOME_TYPE
------------------------------------------------------------
1          |      1             | TYPE1
1          |      1             | TYPE2

但是,当尝试加入时,会引发以下错误,因为加入存储中没有唯一的条目:

Caused by: com.quartetfs.fwk.QuartetRuntimeException: Impossible to find exactly 1 entry from store with key: Key 

我可以理解为什么会出现问题,因为AP存储中有一条记录确实需要变成两个单独的记录,分别连接到连接存储中的每个记录,但我想这是不可能发生的,除非JOINSTORE:SOME_TYPE也是AP存储中的一个字段。

有没有办法从AP商店实现这样的一对多加入?

感谢

编辑:需要明确的是,SOME_TYPE在AP存储中不存在(即使使用不同的名称)。我已经加入了所有公共字段,但加入存储中有多个匹配条目。匹配条目在一个不常见且不存在于AP存储中的字段上有所不同。

如果我尝试添加AP存储中不存在的外键(即使使用不同的名称),我会得到:

Caused by: com.quartetfs.fwk.QuartetRuntimeException: com.quartetfs.fwk.AgentException: On join 'AP_STORE=>JOIN_STORE' the store 'AP_STORE' does not contain the foreign key 'FIELD_ONLY_IN_JOIN_STORE' in its fields:

关系存储联接不会复制数据。使用关系存储的联接,不能将一个条目联接到多个条目。也不能将多生产计算器和关系存储一起使用。

根据您的项目体系结构和工作流程,您可以考虑在事务处理程序中添加一个逻辑,用于馈送AP_Store。在这个事务处理程序中,您可以检索Join_Store的条目,以便复制AP_Store中的条目。

您首先需要通过添加用于区分重复项的新字段来更改AP_Store密钥。

AP_STORE SOME_ID | AP_STORE SOME_DUPLICATE_ID |JOIN_STORE SOME_ID | JOIN_STORE SOME_TYPE
-----------------------------------------------------------------------------------------        
1          |            1               |         1         |       TYPE1
1          |            2               |         1         |       TYPE2

对于您的事务处理程序,您可以注入StoresUniverse以检索Join_Store,然后使用Join_Store上的SOME_ID值进行搜索以检索您需要创建的重复数:

IRelationalStore joinStore = storeUniverse.get("Join_Store");
List<IRelationalEntry> joinEntries = joinStore.search("SOME_ID",apStoreObject.get("SOME_ID"));
for(int i = 0; i < joinEntries.size(); i++) {
// Clone apStoreObject, add a SOME_DUPLICATE_ID value and add it to the list of objects to add in your AP_Store
}

要将您的AP Store加入joiningStore,您需要提供一组字段,这两个存储之间是通用的。没有像这些字段那样的约束是每个存储的关键字段。

然后,如果在AP存储中有一个表示SOME_TYPE的字段,只需将其作为外键添加即可。

<property name="joins">
<list>
<bean class="com.quartetfs.tech.store.description.impl.JoinDescription">
<property name="targetStoreName" value="JoiningStore" /> 
<property name="foreignKeys" value="SOME_TYPE" /> 
</bean>
</list>
</property>

如果该字段在加入商店和加入商店中有不同的名称,则可以使用映射来描述加入商店外键和加入字段中相关字段之间的关系:

<property name="joins">
<list>
<bean class="com.quartetfs.tech.store.description.impl.JoinDescription">
<property name="targetStoreName" value="JoiningStore" /> 
<property name="foreignKeyMap" >
<map>
<entry key="AP_SOME_TYPE" value="SOME_TYPE" />
</map>
</property>
</bean>
</list>
</property>

最新更新