2014-02-27 132 views
0

我有以下ListProducts域對象;Grails GORM唯一約束條件

String name 
Date lastUpdated 
Date dateCreated = new Date() 
String lastUpdatedBy 
CatLists catLists // 
Product product // has a composite primary key 
ListProducts listProducts 

static constraints = { 
    name nullable: true, blank: true 
    catLists nullable: false 
    lastUpdatedBy nullable: true 
    lastUpdated nullable: true 
    dateCreated nullable: false 
    product unique: 'listProducts' 
} 

static mapping = { 
    version true 
    table 'list_products' 
    sort "name" 
} 

產品領域類具有以下約束這是一個複合鍵

FOREIGN KEY (product_fulfillment_sku, product_merchant_id) REFERENCES product(fulfillment_sku, merchant_id) 

,因爲它行得有一個主鍵,即ID爲表因下降到批處理作業,因此唯一值是SKU和商家ID。

我可以在list_products表中看到product_fulfillment_sku,product_merchant_id和cat_lists_id列,但是如何在grails域類中表示這種情況,以便產品無法添加(如果它已經存在)?

我想要實現的是一個產品可以在許多ListProducts分組中,但每個分組只有一次。

針對Postgres Sql數據庫的Grails v2.2.1!

任何想法?

J

+0

因此,此處顯示的此域對象代表分組? – loteq

+0

正確。所以我重構了代碼,以便catLists域對象添加並從列表中刪除項目。如果有人刪除了該列表,則ListProducts表中的所有引用也將被刪除。我從這個博客中獲得了一些啓發https://mrpaulwoods.wordpress.com/2011/02/07/implementing-burt-beckwiths-gorm-performance-no-collections/ – user1859465

回答

0

所以我得到的工作是去除對唯一約束的依賴。由於表格很大,這也會阻止平行查找。採取了一些靈感來自Performance Collections

0

你可以看起來像

domain1 unique:"domain2" 

兩個域1和域2必須是一個對象不是集合域類使用唯一的約束。

如果您使用集合,您可以創建另一個可以使用唯一約束的映射類。