0

我花了大约一周的时间来弄清楚我无法解释的非常奇怪的行为。我不确定任何类型的代码是否会有所帮助,所以我只是解释一下情况:

我们有一个类“caseClass”,其中包含以下 DBList:

姓名 =product

好听的名字=product

自定义显示 =

{{velocity}}
#set ($propertyClass = $object.getxWikiClass().get($name))
#if ($type == 'edit')
  {{html clean=false}}
    $doc.displayEdit($propertyClass, $prefix, $object)
  {{/html}}
#else
   #set($listMap=$propertyClass.getMapValues())
   #foreach($fieldKey in $object.getProperty($name).value)
      #set($fieldValue=$listMap.get($fieldKey).getValue())
      [[${fieldValue}>>$services.PropertyManager.getSourceURL(${fieldKey})]]
   #end
#end
{{/velocity}}

显示类型 =select

多选 =true

由于盒子=10

多选分隔符 = []- 空

加入分隔符 = ,

排序 =none

关系存储 =true

缓存 =false

休眠查询 =

SELECT idVarProp.value, CONCAT(codeVarProp.value, ' - ', naamVarProp.value, ' (', codeProdProp.value, ' - ', naamProdProp.value, ')') 
FROM BaseObject obj, StringProperty idVarProp, StringProperty codeVarProp, StringProperty naamVarProp, StringProperty idVarProdProp, 
BaseObject obj2, StringProperty idProdProp, StringProperty codeProdProp, StringProperty naamProdProp 
WHERE obj.className = 'PDCKlassen.VariantClass' AND 
obj2.className = 'PDCKlassen.ProductClass' AND 
idVarProp.id.id = obj.id AND idVarProp.id.name = 'identificatieString' AND 
codeVarProp.id.id = obj.id AND codeVarProp.id.name = 'codeVariant' AND 
naamVarProp.id.id = obj.id AND naamVarProp.id.name = 'naamVariant' AND 
idVarProdProp.id.id = obj.id AND idVarProdProp.id.name = 'product' AND 
idProdProp.id.id = obj2.id AND idProdProp.id.name = 'identificatieString' AND 
codeProdProp.id.id = obj2.id AND codeProdProp.id.name = 'productCode' AND 
naamProdProp.id.id = obj2.id AND naamProdProp.id.name = 'naam' AND 
idVarProdProp.value = idProdProp.value AND
obj.name <> 'PDCKlassen.VariantTemplate' AND obj2.name <> 'PDCKlassen.ProductTemplate' 
ORDER BY codeProdProp.value, codeVarProp.value

XWiki 类名 = []- 空

Id 字段名称 = []- 空

值字段名称 = []- 空

功能方面很明显,该字段可以包含 0 - n 次出现。

我们有一个基于 java 的侦听器,用于在页面上保存具有此类的一个(确切地说是一个)对象的页面,并带有版本注释:

xwikiContext.getWiki().saveDocument(XWikiDocument, comment, true, xwikiContext)

期望是页面的新(次要)版本与上述注释一起保存。

情况1:对象包含零引用(即为空)

以下是正在发生的事情的踪迹:

版本 1.1 - 这是初始版本 在生成保存文档(版本 1.1)的事件后,如上所述,结果是:

版本 1.2 - 使用保存传递的正确注释并作为注释“第一个注释”生成第二个事件以如上所述保存文档(这次是 1.2 版)并作为注释“第二个注释”结果是:

版本 1.2 - 未检测到更改。版本评论仍然是“第一评论”。

手动编辑页面并按下保存按钮,结果为:

1.3 版(选择​​了小修改)或2.1 版(未选择小修改)

如果我回到第一步(如Version 1.1之后所述),结果相同:第一个次要版本被保存,第二个未保存。

我已经检查了 XWiki 类中实际保存的所有内容。我可以看到在 XWiki 类中传递给 saveDocument 的信息是“正确的”数据。我也对此进行了测试minorEdit = false,这给出了类似的结果

情况2:DBList 包含一个(或多个)引用(即不为空)

以下情况正在发生:

版本 1.1 - 这是初始版本

在生成如上所述保存文档(版本 1.1)的事件后,带有注释“first comment”。结果是:

版本 1.2 - 保存传递的正确注释和注释“第一条评论”

在生成第二个监听器事件后,如上保存文档(这次是1.2 版)并作为注释“第二条评论”,结果是:

1.3 版- 通过第二次保存传递的正确评论和评论“第二次评论”</p>

我已经寻找了各个方面,例如比较对象、纸张和诸如此类的东西,但我没有发现任何差异。

解决方案

直到我决定将“关系存储”更改为 false。这导致了正确的情况(由情况 2 描述 - 有一个空的 DBList 以及一个非空的 DBList)

此解决方案适用于我们的情况,但我们更喜欢选择关系存储 ( true),因为我们不希望对 DBList 的大小有任何限制。

有没有人可以解释这种行为或可以确认这种情况正在发生?

4

0 回答 0