在grails域类中声明排序关联的最佳方法是什么?

在grails域类中声明排序关联的最佳方法是什么?,第1张

概述似乎在Grails中有两种不同的方式来声明排序关联: 方法1(参见here)使用默认排序顺序 class Book { String title }class Author { static hasMany = [books : Book] static mapping = { books sort: "title"}} 方法2(见here)使用SortedSet class 似乎在Grails中有两种不同的方式来声明已排序的关联:

方法1(参见here)使用默认排序顺序

class Book {  String Title }class Author {  static hasMany = [books : Book]  static mapPing = { books sort: "Title"}}

方法2(见here)使用SortedSet

class Book implements Comparable {  String Title  int compareto(obj) {    Title <=> obj.Title  }}class Author {  SortedSet books  static hasMany = [books : Book]}

我不确定使用哪一个,有什么区别(如果有的话),使用一个与另一个之间的利弊.

我将不胜感激任何澄清.

谢谢

解决方法 我开始深入研究这一切是如何工作的,然后发现方法1实际上在当前版本的grails中被破坏(在1.2.1和1.3中都进行了测试).当您实际尝试检索作者并查看它的书籍时,它会抛出异常

它有一个开放的缺陷(4089)已经开放了很长一段时间.

这是被抛出的异常:

ERROR util.JDBCExceptionReporter  - Column not found: BOOKS0_.Title in statement [select books0_.author_books_ID as author1_0_,books0_.book_ID as book2_0_ from author_book books0_ where books0_.author_books_ID=? order by books0_.Title]

如果他们最终修复它,两种方法之间的区别在于方法一,排序是在数据库级别完成的.正如您在上面的例外中所看到的,GORM正在尝试执行“books0_.Title的订单”,该订单将使用book.Title字段上的任何数据库索引并按该顺序返回对象.

第二种方法是在将对象插入集合时对内存中的对象进行排序(使用已定义的compareto方法).

在修复当前错误之前,我会使用方法2,因为它是唯一有效的方法.对于相对较小的事物集合应该没问题.在修复之后,我可能更喜欢方法1,因为数据库应该更快地使用排序字段上的索引进行排序.

总结

以上是内存溢出为你收集整理的在grails域类中声明排序关联的最佳方法是什么?全部内容,希望文章能够帮你解决在grails域类中声明排序关联的最佳方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存