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

时间:2013-12-09 17:07:25

标签: grails gorm

从2.2.x升级到2.3.x后,我的Grails项目遇到了一些奇怪的行为。我有三种简单的域类型用于典型的CMS功能:帖子,类别,标签,以便帖子有很多类别和标签。

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手动清理重复项。

1 个答案:

答案 0 :(得分:1)

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

  • 您的hasMany关系仍然是Set吗?您是否为hasMany关系的域类型实现了hashCode()和equals()? IIRC,这应该强制执行独特性。有一点需要考虑,如果无法在当前数据集上强制执行,则此唯一约束将在创建时失败。话虽如此,您可以使用SQL查询清理当前数据集。

  • 如果您根据column1和column2对这些进行分组,您将获得所需的数据集。您总是可以通过这种方式检索记录。有点脏,并不理想,但它会让你操作,直到找到根解决方案。

我会继续四处看看。如果您发布帖子,类别和标签的域名,它可以提供帮助。只有它的重要性(约束,静态有许多地图和属性本身)是必要的。

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