2012-08-01 76 views
0

我的目標是根據作爲字符串提供的某個屬性來計算實體的絕對排名。我正在使用的基本方法是發出查詢,按降序對結果進行排序並計算所有比我的特定實體的屬性值更大的結果。查詢看起來是這樣的計算物化實體的排名

int rank = o.query(Entity.class).order(String.format("-%s",attribute)). 
      .filter(String.format("%s >", attribute), something).count(); 

但是,東西是我卡住的部分。就我理解客體化的概念而言,查詢具體的實體成員是不可能的。我的下一步要麼是使用一個(在開發時間上很醜但很快)if-construct來標識特定的實體成員,或者開始使用反射(不太難看,但在開發時間方面較慢)。

無論哪種方式,我留下了一種感覺,我錯過了一些明顯的和/或優雅的方式來完成這項任務。有什麼建議麼?謝謝。

回答

1

如果我正確理解這一點,你想要第一個實體,你想要剩下的實體的數量?有兩種方法可以做到這一點:

  1. 使用兩個查詢。在> =上使用limit(1)將返回第一個實體。首先啓動它,但不要實現結果,以便與第二個結果異步運行。
  2. 而不是count(),使用> =運行鍵唯一查詢。保持第一個鍵進行提取,然後手動計算其餘鍵。只有鍵的查詢花費與count()查詢相同(每次操作的小操作數),因爲count()查詢本質上是相同的。

我可能會去#2。無論哪種方式,我希望你的計數不是很大,否則你會通過批次小數據存儲操作,你的應用程序將是昂貴的!

+0

對不起,我的描述可能有點誤導。我的目標是計算給定實體的絕對排名,以允許像這樣的語句:「根據屬性'a',我的實體在這裏是第n個」。我的解決方案是使用反射來確定要篩選的屬性值,然後使用上面的查詢。爲了提高性能,我按照你的建議去運行一個只有鍵的查詢,然後手動計算鍵。像魅力一樣工作,thx :)。 – fxx 2012-08-13 09:04:47