Grails - 在domain list()方法中使用max param时的奇怪行为

时间:2013-11-20 20:47:51

标签: grails gorm

我正在使用spring-security-acl插件并拥有User&角色定义为多对多关系。我还有一个UserRole域类。

我的数据库中有40个用户。

如果我这样做:

User.list()

我得到了所有40个用户。

但是,如果我做了类似的事情:

User.list(offset: 0, max: 20)

我只有12个用户,当我应该得到20时。max param的使用会为该域产生非常奇怪的行为。

我无法弄清楚发生了什么。我想这可能与多对多关系有关。

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

我认为,这里的问题是一对多/多对多关联。您的代码正在尝试使用join来获取用户及其角色。这意味着当您尝试获取具有三个角色的用户时,将返回三行而不是一行。 (这是SQL问题,你无能为力)

因此,当您将40作为最大值时,SQL返回40行,但包含重复的行。现在,当Grails将数据转换为对象时,它会删除重复项,从而为您留下12行。

解决方案:从用户中删除对角色的急切提取,并尝试仅提取用户对象.U