2014-10-18 25 views
1

这是一个简单的情况,但由于某种原因orderBy对我来说还没有工作。Scala + Ebean:orderBy不工作?

我有一个非常简单的模型类;

case class Sale(price: Int, name: String) { 
    @Id 
    var id: Long = 0 
    @Formats.DateTime(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ") 
    var saleDate: DateTime = new DateTime() 
} 

and the companion object;

object Sale { 
    def find = new Finder[String, Sale](classOf[String], classOf[Sale]) 
} 

然后我试图获取所有销售条目列表,并使用saleDate值进行订购;

Sale.find 
    .where 
    ... // some conditions 
    .orderBy("saleDate desc") 
    .findMap 

对我来说这看起来很简单直接,但似乎并不奏效。有谁知道可能的原因是什么?

+0

有没有可能将一个小项目放在一起测试? – Nate 2014-10-20 18:49:09

+0

尝试使用'orderBy().desc(“saleDate”)'代替并启用[SQL查询日志记录](http://stackoverflow.com/a/11956193/1205368),以便您可以看到实际执行的内容。 – Salem 2014-10-20 21:12:50

+0

@Nate,Salem我已经发布了答案。顺便提一下,感谢您的关注。 – Ashesh 2014-10-21 07:13:45

回答

2

这个问题有点奇怪,我找到了解决方案。结果,当你做.findMap,并且结果map的键是找到的条目的id's时,ebean/scala决定按顺序排列键(在我的情况下,升序),完全忽略找到的元素的预期顺序。所以为了解决这个问题,我需要做的就是用.findList替换.findMap

这确实给我们带来了一个有趣的可能性 - 安排回复而不必花费昂贵的费用orderBy;只需将条目存入map,其中键是排序参数。我目前正在使用这种方法,它完美地工作。事实上,它是高效的。