首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >补充*澄清

补充*澄清
EN

Stack Overflow用户
提问于 2011-11-22 21:26:15
回答 1查看 6.1K关注 0票数 7

我正在学习“Grails in Action”中的例子。我很难理解addTo*()函数是如何工作的。

我有一个简单的域: User,Post,Tag,具有以下关系:

  • 用户1 to M后
  • 用户1 to M标签
  • Post M to M Tag

当我运行以下代码时(第一种情况):

代码语言:javascript
复制
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}

我明白了:

代码语言:javascript
复制
null grails
null groovy
null A groovy post null

如果我将第4、5和8行改为:

代码语言:javascript
复制
4.  user.addToTags(tagGroovy).save(flush: true)              
5.  user.addToTags(tagGrails).save(flush: true)    
8.  user.addToPosts(groovyPost).save(flush: true)

我明白了:

代码语言:javascript
复制
2 grails
1 groovy
1 A groovy post Tue Nov 22 21:00:00 WET 2011

有人能解释为什么在第一种情况下iddateCreated属性没有持久化吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-22 23:28:00

这真的是一个冬眠的问题。

只有在保存用户对象时,才会保存整个对象图。因此,它们与用户关联,但尚未持久化到数据库中,因此它们没有in。

在您的示例中,如果在get(1)行之前添加User.save(刷新: true ),您将看到所有新的帖子都被持久化在数据库中。

彼得?莱德布鲁克在这个后http://blog.springsource.org/2010/06/23/gorm-gotchas-part-1/中解释得更好一些。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8234027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档