Grails Gorm 查询限制

Posted

技术标签:

【中文标题】Grails Gorm 查询限制【英文标题】:Grails Gorm Query Restriction 【发布时间】:2015-06-11 04:32:37 【问题描述】:

我有两个域

class ProductQuantity 
    Integer quantity

    static belongsTo = [productSize: ProductSize]


class ProductSize 

    String size

    static hasMany = [productQuantities : ProductQuantity]

我正在尝试构建一个查询,通过 productSize 获取所有 ProductQuantity。我有以下有效的查询。

def productSize = ProductSize.findAllById(1);
def productQuantities = ProductQuantity.findAllByProductSize(productSize)

我希望在单个查询中而不是两个单独的查询中获取 ProductQuanties。

【问题讨论】:

【参考方案1】:
ProductQuantity.createCriteria().list 
    eq 'productSize', ProductSize.load(1)

ProductQuantity.withCriteria 
    eq 'productSize', ProductSize.load(1)

ProductQuantity.where 
    productSize == ProductSize.load(1)
.list()

ProductQuantity.findAll("from ProductQuantity where productSize = ?", [ProductSize.load(1)])

【讨论】:

您使用负载的任何特殊原因? loadget 更有意义。 get 强制进行数据库查询,可能包括许多列、大字符串等。所有ProductSize 实例用于获取其id 以用作最终SQL 中的外键。 get 效率低下,因为您丢弃了从数据库中检索到的所有数据,而只使用您已经知道的一个值 - id。使用load(),您将获得一个 Hibernate 代理。它具有id 值,如果您访问任何其他属性,它将使用它来检索完整实例。但既然你不会,就没有不必要的数据库访问。【参考方案2】:

是的,你可以通过createCriteria 得到这个,比如 --

def productQuantities = ProductQuantity.createCriteria().list() 
    productSize 
        eq('id', 1)
    

【讨论】:

以上是关于Grails Gorm 查询限制的主要内容,如果未能解决你的问题,请参考以下文章

使用 hasmany 字符串查询 Grails / GORM 条件

Grails GORM 查询以匹配多个关联对象

命名查询中的 Grails GORM 计数函数

Grails gorm 查询问题

GRAILS / GORM:动态多重连接

GORM 查询多个集合