gpt4 book ai didi

grails - Grails:渴望一对多获取

转载 作者:行者123 更新时间:2023-12-02 14:30:52 25 4
gpt4 key购买 nike

在阅读有关GORM Gotchas时,我对渴望获取一对多感到有些困惑。而在上述链接中指出:

consider this query:

Author.list(max: 2, fetch: [ books: 'join' ])

In all likelihood, this will return only one Author instance. That’s probably not the behaviour you expect or want. So what’s happening?

Under the hood Hibernate is using a left outer join to fetch the books for each author. That means you get duplicate Author instances: one for each book the author is associated with. If you don’t have the max option there, you won’t see those duplicates because GORM removes them. But the trouble is the max option is applied to the result before the duplicates are removed. So in the example above, Hibernate only returns two results, both of which are likely to have the same author. GORM then removes the duplicate and you end up with a single Author instance.



上面引号的粗体部分是我开始困惑的地方,如果是左外连接,我们不应该最终获得仅由每个作者撰写的书籍(仅由一个作者撰写的书籍),而不是由一个以上作者撰写的书籍作者(我们在左外连接中没有得到的集合的交集)?还是这暗示着 [ books: 'join']查询修饰符可能对不止一位作者的书籍进行了处理。

我有义务作出任何澄清。

最佳答案

造成混淆的原因是您不了解正在使用LEFT JOIN来获取书籍列表的SQL。该注释试图指出的是,通过使用LEFT JOINMAX会给您带来意想不到的结果。考虑以下

author
id, name
1, Bob
2, Joe

book
id, name
1, First book
2, Second book
3, Third book
4, Fourth book

author_books
author_id, book_id
1, 1
1, 2
1, 3
2, 4

查询在提取作者及其Book关联时使用 LEFT JOIN,因此从数据库返回的数据如下所示:
author.id, author.name, book.id, book.name
1, Bob, 1, First book
1, Bob, 2, Second book

这将导致返回一位作者,但书籍集将仅包括三本相关书籍中的两本。这是由于对SQL语句本身应用了 MAX限制,并限制了返回的最大行数。

指出这一点的原因是,您 可能会希望您在列表中最多获得两位作者,而不论关联的书籍数量如何,但是由于实际的SQL并非如此,因此由于获取模式正在执行。

希望能有所帮助。

关于grails - Grails:渴望一对多获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30942895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com