gpt4 book ai didi

grails - Grails 'false'唯一错误

转载 作者:行者123 更新时间:2023-12-02 14:54:41 25 4
gpt4 key购买 nike

我有以下域类(简化版)

class TalkingThread {

static hasMany = [comments:Comment]
Set comments = []
Long uniqueHash
}


class Comment {
static belongsTo = [talkingThread:TalkingThread]
static hasOne = [author:CommentAuthor]
Long uniqueHash

static constraints = {
uniqueHash(unique:true)
}
}


class CommentAuthor {
static hasMany = [comments:Comment]
Long hash
String name
String webpage
}

以下方法
public TalkingThread removeAllComments(TalkingThread thread){
def commentsBuf = []
commentsBuf += thread.comments
commentsBuf.each{
it.author.removeFromComments(it)
thread.removeFromComments(it)
it.delete()
}
if(!thread.save()){
thread.errors.allErrors.each{
println it
}
throw new RuntimeException("removeAllComments")
}
return post
}

public addComments(TalkingThread thread, def commentDetails){
commentDetails.each{
def comment = contructComment(it,thread)
if(!comment.save()){
comment.errors.allErrors.each{ println it}
throw new RuntimeException("addComments")
}
thread.addToComments(comment)
}
return thread
}

有时我需要从TalkingThread中删除所有注释,并添加共享相同uniqueHashes的注释。因此,我先调用removeAllComments(..)方法,然后再调用addComments(..)方法。这导致

Comment.uniqueHash.unique.error.uniqueHash,它由所谓的已删除评论和添加的"new"评论引起。

我应该冲洗吗?我的域类可能有问题吗?

编辑扩展问题。

也许这是一个不同的问题,但是我认为该 session 已删除了所有关联和对象。因此, session 状态知道所有 TalkingThread注释都已删除。当然,这还没有反射(reflect)在数据库中。我还假设新注释的“保存”将是有效的,因为这种“保存”与 session 状态一致。但是,这种“保存”将与数据库状态不一致。因此,我对grails如何验证与 session 和数据库状态有关的对象的理解是有缺陷的!在理解关于 session 和数据库状态的验证保存的过程中的任何帮助也将受到赞赏。

最佳答案

如果要从Comment中删除所有TalkingThread,则可以使用Hibernate的层叠行为。


static mapping = {
comments cascade: 'all-delete-orphan'
}

TalkingThread,然后您可以先调用 comments.clear(),再调用 thread.save(),这将删除关联中的注释。

有一个 good article on Grails one-to-many-relationships hereofficial Grails docs on it are here.

关于grails - Grails 'false'唯一错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com