Hibernate Criteria查询随机

时间:2012-01-16 08:48:47

标签: hibernate random criteria

我有一个使用Hibernate的项目。 这有一个名为Question的类。 每个Question都有一个难度级别(1,2,3); 每个Question也有一个属性是字段(a,b,c,d,e,f,g,h,i,k);

假设我有100个问题。我想在条件下随机提出20个问题:

  • 第1级中的7个问题
  • 第2级中的7个问题
  • 3级中的6个问题。
  • 每个字段至少有一个问题

感谢所有^^

1 个答案:

答案 0 :(得分:1)

首先,我认为使用Hibernate查询甚至一组Hibernate查询都难以解决这个问题。

我将如何做:

  • 在内存中加载所有100个问题
  • 在此地图中创建Map<Field, List<Question>>shuffle所有列表
  • 对于每个字段,请采取具有可接受级别的相应列表的第一个问题
  • 一旦你在每个领域都有一个问题,拿出所有剩下的问题,把它们放在一个列表中,洗牌,然后遍历列表。每当一个问题的级别可以接受时,请接受它。这样做直到你有20个问题。

如果对于每个字段,您保证每个级别至少有一个问题,那么这应该有效。如果情况并非如此,那就更难了。

如果您有更多的问题100,并且它们无法加载到内存中,您可以使用相同类型的算法,但使用random queries来选择问题:

  • 每个字段发出一个查询以在每个字段中查找问题。 where子句应该只接受给定的字段,并且只应接受仍然可接受的级别。
  • 发出查询以随机查找N个问题(例如,N等于50,并且只有接受其余级别的where子句),并采用前10个可接受的问题。如果可接受的问题少于10个,请再试一次。最多应该有3个这样的查询。确保where子句拒绝已加载的问题的ID。