Grails数据库映射

时间:2015-07-17 09:13:54

标签: mysql grails mapping

我的问题是我的数据库映射,我没有让它工作。 我已完成this教程。

class Comment {
String comment
Date dateCreated // Predefined names by Grails will be filled automatically
Date lastUpdated // Predefined names by Grails will be filled automatically

User user

// delete a comment for a feedback if the feedback item is deleted
 static belongsTo=[feedback:Feedback]

static mapping = {
    feedback column: 'COMMENT_FEEDBACK_ID', joinTable: false
}

static constraints = {
    comment (blank:false, nullable: false, size:5..500)
    user (nullable: true) // Comments are allowed without a user
}


String toString(){
    if (comment?.size()>20){
        return comment.substring(0,19);
    } else
        return comment;
}}

class Feedback {
String title
String feedback
Date dateCreated // Predefined names by Grails will be filled automatically
Date lastUpdated // Predefined names by Grails will be filled automatically

// relationship to the other classes
User user


static hasMany=[comments:Comment]

static mapping = {
    comments column: 'FEEDBACK_COMMENT_ID', joinTable: false
}

// constrains are defined as static
static constraints ={
    title(blank:false, nullable: false, size:3..80)
    feedback(blank:false, nullable:false, size:3..500)
    user(nullable:false)
}}

class User {
String name
String email
String webpage


static constraints = {
    name (blank:false, nullable:false, size:3..30, matches:"[a-zA-Z1-9_]+")
    email (email:true)
    webpage (url:true)
}

String toString(){
    return name;
}
}

当我尝试删除连接到反馈/评论的用户时,出现错误:

  

无法删除或更新父行:外键约束失败   (guestbookcomment,CONSTRAINT FK_mxoojfj9tmy8088avf57mpm02   外键(user_id)参考userid))

映射应该是什么样的?

1 个答案:

答案 0 :(得分:0)

域设计存在多个问题,首先将用户从评论中删除,因为用户已经有反馈评论。如果您仍希望保留该设计,请在belongsToUser中将Comment定义为Feedback

试试这个......

hasOne Feedback添加到User

class User {
String name
String email
String webpage

hasOne = [feedback:Feedback ]
static constraints = {
    name (blank:false, nullable:false, size:3..30, matches:"[a-zA-Z1-9_]+")
    email (email:true)
    webpage (url:true)
}

String toString(){
    return name;
}
}

添加Feedback belongsTo User并在Comment删除时级联

class Feedback {
String title
String feedback
Date dateCreated // Predefined names by Grails will be filled automatically
Date lastUpdated // Predefined names by Grails will be filled automatically

// relationship to the other classes
User user
static belongsTo = [User]

static hasMany=[comments:Comment]

static mapping = {
    comments cascade: 'all-delete-orphan',column: 'FEEDBACK_COMMENT_ID', joinTable: false
}

// constrains are defined as static
static constraints ={
    title(blank:false, nullable: false, size:3..80)
    feedback(blank:false, nullable:false, size:3..500)
    user(nullable:false)
}}

只需从User

中删除Comment即可
class Comment {
String comment
Date dateCreated // Predefined names by Grails will be filled automatically
Date lastUpdated // Predefined names by Grails will be filled automatically

//User user

// delete a comment for a feedback if the feedback item is deleted
 /static belongsTo=[User,feedback:Feedback]
static belongsTo=[feedback:Feedback]

static mapping = {
    feedback column: 'COMMENT_FEEDBACK_ID', joinTable: false
}

static constraints = {
    comment (blank:false, nullable: false, size:5..500)
    //user (nullable: true) // Comments are allowed without a user
}


String toString(){
    if (comment?.size()>20){
        return comment.substring(0,19);
    } else
        return comment;
}}