想象一下,我有以下内容(这是我网站的搜索机制)
class Supermarket {
String sp_name
String sp_street
}
class Products {
String p_name
String p_price
}
class products_supermarket{
Supermarket sp
Products pro
}
现在我想创建一个标准:
def c = Supermarket.createCriteria()
def results = c.list {
like("sp_street", params.street)
and {
************ ... params.product
}
maxResults(10)
}
我拥有 * 我希望能够在products_supermarket类上找到超级搜索产品。怎么做?
PS。如果条件作为each()方法工作,迭代所有超市,我可以使用if-else语句来搜索产品,如果找到我可以使用: idEq(it) < / strong>,其中它是超市ID。这样我就可以做到。我的问题是,我不知道如何获得当前的超市ID。有什么帮助吗?
答案 0 :(得分:2)
and
适用于内部标准,因此没有必要将其应用于单个语句。顶级标准是and
- 由defauilt编辑。hasMany: Supermarket
和hasMany: Product
即可。连接器表将由Hibernate自动生成。ProductsSupermarket
连接器类,请将belongsTo: Supermarket
和belongsTo: Product
添加到其中,并将'hasMany:ProductsSupermarket'添加到其他两个,否则您将失去Grails' GORM优势。id
就像那样简单:mySupermarket.id
或mySupermarket.ident()
如果关键字段的命名方式不同。默认情况下,id
字段会自动添加到类和表中。所以查询是:
List<Supermarket> results = Supermarket.withCriteria {
like("sp_street", params.street)
productSupermarket {
product {
idEq(params.product)
}
// or just eq('product', someProduct)
}
************ ... params.product
maxResults(10)
}