2011-03-04 81 views
2

我在jackrabbit-users列表上提出了这个问题,但是我没有得到答案。JackRabbit - 删除重复行

JCR-SQL2不提供SELECT DISTINCT(或类似的AFAIK)。 JCR 1.0中的SQL或XPATH都不行...人们如何解决这个问题?删除重复行的最佳方法是什么?

我看到有人在迭代结果并将它们放入Set中。就我而言,由于可能有大量的结果,这种方法可能最终成本太高。

有没有人在这里有一个建议?

回答

2

在JCR 1.0(例如JSR-170)或JCR 2.0(例如JSR-283)中定义的查询语言都不具有SELECT DISTINCT的概念。

要做到这一点的唯一方法是手动处理结果并抛出您已经看到的任何行(或节点)。使用一组路径或节点对象将起作用。这并不困难,但不幸的是它比应该更难,正如你所提到的,如果有很多行和/或重复的话,它可能会很昂贵。

这就是为什么ModeShape提供对JCR-SQL2查询的完全支持,但也允许使用SELECT DISTINCT。事实上,振型支持许多其它特征,诸如

  • WHERE子句中的非相关子
  • LIMIT nOFFSET m
  • UNIONINTERSECTEXCEPT
  • FULL OUTER JOINCROSS JOIN
  • BETWEEN标准
  • 设置标准,我们荷兰国际集团INNOT IN
  • DEPTHPATH动态操作数

和其他几个人。有关详细信息,请参阅documentation

+0

非常感谢Randall,我知道Modeshape已经实现了DISTINCT,后来我实际上正在考虑询问关于Modeshape的一些事情。我正在考虑迁移到Modeshape的可能性,但是有一个功能在我正在使用的JackRabbit中,我不知道Modeshape是否有,http://wiki.apache.org/jackrabbit/ExcerptProvider – Miguel 2011-03-04 17:56:11

+0

Miguel。你是对的 - ModeShape还没有这个功能。在我们的论坛上咨询! – 2011-03-04 18:26:29