1

我想查询具有多个属性键/值对的所有 InvItem,它们应该满足我的 where 条件。

class InvItem{
  static hasMany = [ attributes : InvAttributes ]
}

class invAttributes{
  String key
  String valueShort

  static belongsTo = [ invItem : InvItem ]
}

让我们在 sql 中说:(这就是我在 sql 中的做法!)

SELECT
id,
FROM inv_item inv
JOIN inv_attribute att1 ON inv.id = att1.inv_item_id
JOIN inv_attribute att2 ON inv.id = att2.inv_item_id
WHERE (att1.key = 'Alias'      AND att1.value_short LIKE 'foo%')  
AND   (att2_.key = 'DatasetId' AND att2.value_short LIKE 'bar%')

我尝试了一个 createCriteria 来多次出现这样的属性:

ciRequest是一个具有key和的属性列表valueShort

    def criteria = InvItem.createCriteria()
    def result = criteria.list {
        ciRequest.attributes.each { req ->
             attributes {
                eq('key', "${req.key}")
                like('valueShort', '%' + "${req.value.trim().toLowerCase()}" + '%')
            }
        }
    }

但这会导致:

SELECT id
FROM inv_item this_ 
 INNER JOIN inv_attribute attributes1_ ON this_.id = attributes1_.inv_item_id
WHERE (attributes1_.key = ? AND attributes1_.value_short LIKE ?) AND
      (attributes1_.key = ? AND attributes1_.value_short LIKE ?)

我该如何管理它,InvAttribute 表上会有第二个、第三个、多个连接,以便它可以检查所有条件?

4

0 回答 0