【问题标题】:Criteria for SELECT bla1, bla2 FROM fooSELECT bla1, bla2 FROM foo 的标准
【发布时间】:2011-04-10 15:27:54
【问题描述】:

我想要一个仅从给定域的所有属性中选择 bla1 和 bla2 的条件

Foo.findAll()

def c = Foo.createCriteria()
def results = c {}

有:

SELECT * FROM foo

results = 给定域 foo 的 所有 属性列表

想要

SELECT bla1,bla2 FROM foo

写成标准 def c = Foo.createCriteria() 定义结果 = c { ??? }

【问题讨论】:

  • 所以你的问题是?好像你已经有了遮阳篷?
  • 我的错,在上面编辑,谢谢
  • 您的域真的有这么多属性,您需要担心尝试像这样优化吗?如果是这样,那么您可能需要稍微分解一下您的对象模型。

标签: hibernate grails criteria


【解决方案1】:

我现在使用的 namedQueries 工作正常:

类项目{ 产品产品 String somethingShown String somethingHidden

static belongsTo = [product:Product]
static constraints = {
    somethingShown()
    somethingHidden()
}
    static namedQueries = {
        restrictedObj { item ->
                projections {
                    property('product')
            property('somethingShown')
        }
        eq 'id', item.id
}

}

查询受限物品

Item.restrictedObj(item).list()

现在只剩下一个问题,如何限制与belongsTo相关的类。例如,如果 Product 也有一个 namedQuery“restrictedObj”。有什么方法可以在条件属性中使用它?

【讨论】:

    【解决方案2】:

    我认为为此使用 HQL 更自然:

    def results = Foo.executeQuery('SELECT bla1,bla2 FROM Foo')
    

    返回的值将是一个 Object[] 的列表,所以如果 bla1 是一个字符串,而 bla2 是一个整数,您可以像这样访问数据

    for (row in results {
       String bla1 = row[0]
       int bla2 = row[1]
       ...
    }
    

    【讨论】:

      【解决方案3】:

      你需要使用投影

      def c = Foo.createCriteria()
      results = c.list {
          projections {
              property('bla1')
              property('bla2')
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 2020-02-02
        • 2012-02-25
        相关资源
        最近更新 更多