2012-09-13 104 views
1

一個簡單的博客應用,Grails的1.3.9和MySQL,二級域名類,博文與標籤之間一個多一對多的關係Grails的刪除孤兒許多一對多的關係

class BlogPost { 

    String title 
    String teaser 
    String body 
    Date updated 
    Category category 
    Integer priority 

    static hasMany = [comments:Comment,tags:Tag] 

    static belongsTo = [Category,Tag] 

    static searchable = true 

    String toString() { 
     "$title" 
    } 

    static constraints = { 
     title(nullable:false,blank:false,lenght:1..50) 
     teaser(nullable:false,blank:false,lenght:1..100) 
     body(nullable:false,blank:false,maxSize:5000) 
     updated(nullable:false) 
     category(nullable:false) 
     priority(nullable:false) 
    } 
} 

class Tag { 

    String name 
    String description 

    static hasMany = [blogpost:BlogPost] 

    static searchable = true 

    String toString() { 
     "$name" 
    } 

    static constraints = { 
     name(nullable:false,blank:false) 
     description(nullable:false,blank:false) 
    } 
} 

休眠在創建MySQL三個相關的表格:blog_post,tag和tag_blogpost

現在,如果我創建了一個與博客帖子Y相關的標籤X,然後刪除Y,則孤立的行保留在tag_blogpost表中,並且標籤X的show view會拋出異常「不存在給定標識符的行:[0123]如何自動刪除(級聯)tag_blogpost表中的孤行行?

回答

0

在您的模型中,BlogPost和Tag之間有兩個關係是正確的?要創建一個BlogPost,你必須有一個標籤,也可以是n個標籤?

您創建的標籤與BlogPost關聯爲標籤屬性還是標籤列表中?

如果是在標籤列表,我認爲Grails的考慮您的模型作爲許多一對多並根據docs

許多一對多:只能從「所有者節省級聯「到」依賴「,而不是刪除。

在post-tags模型中思考我認爲你的方法可能是多對多的關係,並且手動處理刪除標籤,刪除之前的帖子。如果您確實需要在帖子中至少有一個標籤,那麼在BlogPost的視圖中,您可以強制用戶選擇一個標籤。

+0

謝謝塞爾吉奧 ......所以要根據Grails的文檔你說是不是這麼簡單,在許多一對多的關係,會自動刪除孤立行,我我會試着解決,直到我對GORM和Hibernate的知識更加堅實 – laz

0

其實這個修正模型對我的作品

class BlogPost { 
    String title 
    String teaser 
    String body 
    Date updated 
    Integer priority 

    static hasMany = [blogPostTags:BlogPostTag] 
    static belongsTo = [Category] 

    String toString() { 
     "$title" 
    } 

    static constraints = { 
     title(nullable:false,blank:false,lenght:1..50) 
     teaser(nullable:false,blank:false,lenght:1..100) 
     body(nullable:false,blank:false,maxSize:5000) 
     updated(nullable:false) 
     priority(nullable:false) 
    } 
} 

class Tag { 

    String name 
    String description 

    static hasMany = [blogPostTags:BlogPostTag] 

    String toString() { 
     "$name" 
    } 

    static constraints = { 
     name(nullable:false,blank:false) 
     description(nullable:false,blank:false) 
    } 
} 

class BlogPostTag { 
    BlogPost blogPost 
    Tag tag 

    static belongsTo = [BlogPost,Tag] 

    static constraints = { 
     blogPost(nullable:false) 
     tag(nullable:false) 
    } 
}