我有2个域类。 ParentDomain和Section。级联更新未触发
class ParentDomain {
String description
List sections
static hasMany = [sections:Section]
}
class Section {
String name
static belongsTo = [parentDomain : ParentDomain]
}
在当我设置(首次),它与在部分表下面的内容正确保存它的服务方法parentDomain.setSections(部分对象的列表)。
+----+---------+---------------+-------------+------------------+
| id | version | name | parentdomain_id | sections_idx |
+----+---------+---------------+-------------+------------------+
| 1 | 0 | Section 1 | 6 | 0 |
| 2 | 0 | Section 1 | 6 | 0 |
+----+---------+---------------+-----------------+--------------+
当我获得/更新从DB父域对象和新段设置对象列表parentDomain.setSections(新区段对象列表),然后运行parentDomain.save(冲洗:真)不从表中删除旧的部分对象,但除了像这样的旧部分之外,还添加了新的部分条目。
+----+---------+---------------+-------------+------------------+
| id | version | name | parentdomain_id | sections_idx |
+----+---------+---------------+-------------+------------------+
| 1 | 0 | Section 1 | 6 | 0 |
| 2 | 0 | Section 2 | 6 | 1 |
| 3 | 0 | Section 3 | 6 | 0 |
| 4 | 0 | Section 4 | 6 | 1 |
+----+---------+---------------+-----------------+--------------+
据我了解,它应该只保留2节的对象,而更新和删除由于级联更新旧的。同样奇怪的是,当我从db中获取父域对象实例时,我只能得到与它关联的最后2个section对象。是否因为sections_idx?
感谢您的回复。实际上,自从几周以来我一直在使用GORM。我主要使用休眠Pojo的数据持久性。我知道addTo和removeFrom *,但我不明白为什么设置方法是不正确的方式,因为我想覆盖集合。我认为addTo *会附加到现有的列表。同样在hibernate中,如果我们覆盖集合,旧的集合将被删除。我期望GORM能够以这种方式工作,因为它也是建立在休眠之上的。 –
我明白了idx专栏的意义。列表保留了订单,因此它需要添加_idx列来保持这一点。我会更深入地研究它,并将其与休眠进行比较。感谢曼尼什;)+1为您的答案 –