【问题标题】:Using transient property in findBy or listOrderBy methods在 findBy 或 listOrderBy 方法中使用瞬态属性
【发布时间】:2011-12-22 18:54:56
【问题描述】:

我有一个使用一些瞬态属性 foo 的域类。现在我想在此属性上使用 listOrderByFoo,但我收到错误“无法解析属性:foo”。 有没有办法在 listOrderByProperty() 或 findByProperty() 中使用瞬态属性?

class Bar {
 String name
 static transients = ['foo']
 def getFoo() {
   ...
 }
}

Bar.findAllByFooIsNotNull()
Bar.listOrderByFoo()

【问题讨论】:

  • 根据定义,瞬态属性不是持久的。你怎么能期望查询 Hibernate 基本上被告知忽略的属性?
  • 由于瞬态属性主要是计算出来的,我想我可以像在 sql 语句中定义变量一样使用它们(例如 COUNT(*) 作为数字)

标签: hibernate grails dns


【解决方案1】:

很遗憾,没有。就像马特在他对您的问题的评论中所说的那样,由于这些字段被标记为瞬态,它们不会持久化到数据库中,因此您无法查询它们。如果您想按瞬态属性查找或列出,则需要编写一个闭包来迭代已设置瞬态属性的对象列表。没有可用于执行此操作的动态 GORM 方法。

def bars = [ new Bar(foo:1), new Bar(foo:2), new Bar(foo:4), new Bar(foo:3) ];

// Find bar with foo=3
bars.find { it.foo == 3 }

// Sort bars by foo
bars.sort { a,b -> a.equals(b)? 0: a.foo<b.foo? -1: 1 }

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 2015-11-08
    • 1970-01-01
    • 2011-02-10
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多