从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手动清理重复项。
答案 0 :(得分:1)
升级时我没有类似的行为。但是,老实说,我不记得hasMany关系是什么样的。几个问题/注意事项:
您的hasMany关系仍然是Set吗?您是否为hasMany关系的域类型实现了hashCode()和equals()? IIRC,这应该强制执行独特性。有一点需要考虑,如果无法在当前数据集上强制执行,则此唯一约束将在创建时失败。话虽如此,您可以使用SQL查询清理当前数据集。
如果您根据column1和column2对这些进行分组,您将获得所需的数据集。您总是可以通过这种方式检索记录。有点脏,并不理想,但它会让你操作,直到找到根解决方案。
我会继续四处看看。如果您发布帖子,类别和标签的域名,它可以提供帮助。只有它的重要性(约束,静态有许多地图和属性本身)是必要的。
此外,您可以打开详细日志记录并查看创建新帖子时正在运行的SQL语句。我猜这是发生在这里。从创建帖子的视图到post.save()调用的流程片段也可能会有所帮助。