2010-01-15 33 views
5

Tôi có một ứng dụng Grails với một -simplified - lớp miền mà trông như thế này:Grails miền hạn chế nét

class Capacity { 

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


Date month  
Company company 
String note 
... 
} 

Cặp tháng công ty phải là duy nhất. (Tức là chúng phải là khóa chính tại DB).

Làm cách nào để xác định ràng buộc như vậy?

Thanks a lot trước

Luis

+1

nó chỉ là Grails chứ không phải Groovy trên Grails. –

Trả lời

6

Vì bạn muốn đây là một composite primary key trong DB bạn sẽ phải tuyên bố rằng bản đồ:

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

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

trong đó sản xuất bảng sau (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

cảm ơn! Đây là chính xác những gì tôi đang tìm kiếm – Luixv

+0

Điều này vẫn còn thực thi sự độc đáo trong 'validate()'? Nếu không, tôi nghĩ rằng một sự kết hợp của câu trả lời này và Dave là cần thiết. Nếu không, bạn sẽ nhận được các ngoại lệ ràng buộc SQL thay vì các lỗi xác nhận Grails. –

+0

@RobHruska Một số ràng buộc sử dụng trạng thái của cơ sở dữ liệu để xác thực và không có trong thử nghiệm đơn vị (trước Grails 2.0) –

Các vấn đề liên quan