我的问题是我的数据库映射,我没有让它工作。 我已完成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;
}
}
当我尝试删除连接到反馈/评论的用户时,出现错误:
无法删除或更新父行:外键约束失败 (
guestbook
。comment
,CONSTRAINTFK_mxoojfj9tmy8088avf57mpm02
外键(user_id
)参考user
(id
))
映射应该是什么样的?
答案 0 :(得分:0)
域设计存在多个问题,首先将用户从评论中删除,因为用户已经有反馈评论。如果您仍希望保留该设计,请在belongsTo
和User
中将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;
}}