2012-02-16 40 views

回答

3

Derived properties

例从上面的链接

class Product { 
    Float price 
    Float taxRate 
    Float tax 
    static mapping = { 
     tax formula: 'PRICE * TAX_RATE' 
    } 
} 
2

这里做,这取决于你的需求的两个完整的方式。

如果您不需要存储第三场,这意味着它只能用于显示,你可以这样做:

class MyDomain { 
    int field1 
    int field2 

    static transients = ['field3'] 

    getField3() { 
     field1 + field2 
    } 
} 

这将允许您访问的总和为myDomain.field3

如果你需要存储,说是因为它在计算中大量使用,你可以使用事件来自动计算和存储的总和,就像这样:

class MyDomain { 
    int field1 
    int field2 
    int field3 

    def beforeInsert() { 
     field3 = field1 + field2 
    } 

    def beforeUpdate() { 
     field3 = field1 + field2 
    } 
} 

做这种方式是,好处无论是还是填充第三个字段,其中它已创建或更新。

札记二

  1. 如果您仅希望在它的创建,而不是更新,然后取出beforeUpdate总结field3
  2. 如果你正在做比这个简单的总和更复杂的计算,把它们扔在另一种方法(如updateField3),并调用它,而不是硬编码它。
+0

我认为这种方法对于瞬态属性很好,但如果需要查询,标准和持久性,公式仍然是更好的选择。 – 2012-02-16 09:31:18

+1

我完全同意 - 这就是为什么我给你+1!当你发布时我刚写完了我的文章,所以我只是张贴了我的完整性。 – OverZealous 2012-02-16 09:44:13

相关问题