【问题标题】:How to persist data in a sorted order in GORM如何在 GORM 中按排序顺序保存数据
【发布时间】:2013-11-22 20:18:41
【问题描述】:

这是一个新手问题,任何帮助将不胜感激。我有一个类Item如下。

类项目{ 字符串名称 // 其他属性 ... 静态约束 = { 名称(空白:假,唯一:真) // 其他约束 ... } }

如何在 Grails/GORM 中按排序顺序保存 Items?意思是,如果我这样做了

新项目(名称:'a').save(刷新:true,failOnError:true) 新项目(名称:'c').save(刷新:真,failOnError:真) 新项目(名称:'b').save(刷新:真,failOnError:真) println Item.getAll().name

我应该得到[a, b, c]。谢谢!

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    保留并不重要,重要的是你检索它的方式,你可以简单地按照以下方式进行

    println Item.list().sort() 
    
    println Item.list().sort(){ //write your groovy clouser here to sort asc and dec }
    

    【讨论】:

    • 谢谢!但是,我想知道是否有任何方法可以首先按排序顺序保存数据?原因是,如果它是一个有很多行的大表并且如果我非常频繁地检索数据,我认为 sort() 会更慢(因为每次我检索数据时它都会进行排序)。背景是,项目是项目的词汇表,我将不那么频繁地向表中添加新项目,但会非常频繁地检索数据。任何 cmets 将不胜感激。
    • 要以特定顺序保留项目,您可以将您的集合映射为列表。详情请见docs.codehaus.org/plugins/servlet/mobile#content/view/228171330
    • 谢谢@rcgeorge23。我可以使用 SortedSet 进行自定义排序。我找到了您引用的文档的最新版本 (grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps)。感谢您提供非常有用的提示!
    【解决方案2】:

    将此添加到您的域类中

    static mapping = {
        sort name: "desc" //"asc"
    }
    

    【讨论】:

    • 这很好用,谢谢!不过有一条评论,我必须使用 Item.list(),而不是 Item.getAll()。即使包含映射,getAll() 方法似乎也不会打印排序列表。我喜欢这种映射方法,因为我不必每次检索数据时都进行 sort()。
    • 排序名称:“desc”不保证插入顺序。这是一种自定义查询结果排序依据的默认属性的方法 (grails.org/doc/latest/ref/Database%20Mapping/sort.html)
    • @cantoni:有什么办法可以保证广告的顺序吗?我想我明白你的意思了 - 谢谢你的澄清。
    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2011-06-24
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多