我正在学习“Grails in Action”中的例子。我很难理解addTo*()函数是如何工作的。
我有一个简单的域: User,Post,Tag,具有以下关系:
当我运行以下代码时(第一种情况):
1. def user = new User(userId: 'joe', password: 'secret').save()
2. def tagGroovy = new Tag(name: 'groovy')
3. def tagGrails = new Tag(name: 'grails')
4. user.addToTags(tagGroovy)
5. user.addToTags(tagGrails)
6.
7. def groovyPost = new Post(content: 'A groovy post')
8. user.addToPosts(groovyPost)
9. groovyPost.addToTags(tagGroovy)
10.
11. User.get(1).tags.each {println it.id + " " + it.name}
12. User.get(1).posts.each {println it.id + " " + it.content + " " + it.dateCreated}我明白了:
null grails
null groovy
null A groovy post null如果我将第4、5和8行改为:
4. user.addToTags(tagGroovy).save(flush: true)
5. user.addToTags(tagGrails).save(flush: true)
8. user.addToPosts(groovyPost).save(flush: true)我明白了:
2 grails
1 groovy
1 A groovy post Tue Nov 22 21:00:00 WET 2011有人能解释为什么在第一种情况下id和dateCreated属性没有持久化吗?
发布于 2011-11-22 23:28:00
这真的是一个冬眠的问题。
只有在保存用户对象时,才会保存整个对象图。因此,它们与用户关联,但尚未持久化到数据库中,因此它们没有in。
在您的示例中,如果在get(1)行之前添加User.save(刷新: true ),您将看到所有新的帖子都被持久化在数据库中。
彼得?莱德布鲁克在这个后http://blog.springsource.org/2010/06/23/gorm-gotchas-part-1/中解释得更好一些。
https://stackoverflow.com/questions/8234027
复制相似问题