2010-01-15 113 views
5

我有一個(簡體)Grails應用程序 - 它看起來像這樣的領域類:Grails領域約束定義

class Capacity { 

static constraints = {    
    month(blank:false, nullable:false) 
    company(blank:false, nullable:false) 
} 


Date month  
Company company 
String note 
... 
} 

兩人月,公司必須是唯一的。 (即他們應該是數據庫的主鍵)。

如何定義這樣的約束?

感謝很多提前

路易斯

+1

這只是Grails,而不是Grails上的Groovy。 – 2010-01-15 17:59:29

回答

6

既然你想這是一個數據庫中的composite primary key您必須聲明映射:

class Capacity implements Serializable { 
    Date month  
    Company company 
    String note 
    ... 

    static mapping = { 
     id composite:['month', 'company'] 
    } 
} 

下表對其主要生產( MySQL):

CREATE 
    TABLE capacity 
    (
     MONTH DATETIME NOT NULL, 
     company_id bigint NOT NULL, 
     version bigint NOT NULL, 
     note VARCHAR(255) NOT NULL, 
     PRIMARY KEY (MONTH, company_id), 
     INDEX FKFBF514BA69595C7A (company_id) 
    ) 
    ENGINE=MyISAM DEFAULT CHARSET=latin1 
+0

謝謝!這正是我正在尋找的 – Luixv 2010-01-17 04:21:33

+0

這是否仍然在'validate()'中執行唯一性?如果不是,我認爲這個答案和戴夫的組合是必要的。否則,你最終會得到SQL約束異常,而不是Grails驗證錯誤。 – 2010-03-12 18:00:45

+0

@RobHruska一些約束使用數據庫的狀態進行驗證,並且在單元測試中不存在(在Grails 2.0之前) – 2011-12-22 21:22:46