grails - Grails 2.3.x升级产生重复hasMany关系

标签 grails gorm

从2.2.x升级到2.3.x之后,我的Grails项目正在遇到一些奇怪的行为。我有三种用于典型CMS功能的简单域类型:Post,Category,Tag,以使Post具有许多Category和Tag。

static hasMany = [categories: Category, tags: Tag]

创建帖子时,用户从g:select ... multiple =“multiple”中选择适用的类别。每个类别在多选中仅显示一次。但是现在,查询特定类别的帖子的查询将返回同一帖子的多个条目。查看由Grails创建的MySQL数据库联接表“post_category”,我看到确实存在多个条目:
Post_categories_id | category_id 
-------------------|------------
30000              | 1
30000              | 1
30000              | 2
30000              | 2

有没有人看到过类似的行为?关于修复的建议?现在,我只是通过SQL手动清理重复项。

最佳答案

进行升级时,我没有类似的行为。但是,老实说,我不记得hasMany关系的样子。几个问题/注意事项:

  • 您的hasMany关系仍然是Set吗?您是否为hasMany关系的域类型实现了hashCode()和equals()? IIRC,这应该强制唯一性。要考虑的一件事是,如果无法在当前数据集上强制执行此唯一约束,则该约束现在将在创建时失败。话虽如此,您可以使用SQL查询清理当前数据集。
  • 看起来,如果您基于column1和column2对它们进行了分组,则将获得所需的数据集。您始终可以以这种方式检索记录。有点脏,不是很理想,但是它将使您可以操作,直到找到根本的解决方案为止。

  • 我会继续四处看看。如果您为发布,类别和标记发布域,则可能会有所帮助。只需要重要的内容(约束,静态hasMany映射和属性本身)。

    此外,您可以打开详细日志记录,并在创建新帖子时查看正在运行的SQL语句。我的猜测是这里正在发生。从创建帖子的 View 到post.save()调用的流程摘要也可能会有所帮助。

    关于grails - Grails 2.3.x升级产生重复hasMany关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476385/

    相关文章:

    grails - 从Grails 2.5.4升级到3.1.8,GORM错误

    grails - 是否可以在两个域类之间进行内部联接?

    grails - 如何获得持久化类中的对象列表的权限?

    grails - 在开发人员模式下通过元编程删除simpledb mapWith

    apache - 带有 Tomcat/Apache ProxyPass 的 Grails URL

    grails 输入标签 : placeholder not shown if value is a whitespace

    grails - 选择多个,获取选定值和未选定值

    grails - Grails 最佳实践资源

    java - 创建一个我可以将二进制文件发送到的 RESTful 服务是否有意义?

    grails - GORM域变量不属于