[Grails] 关于GORM的操作问题

zengsun 2007-07-05
groovy> b1 = new Bookmark(url: new URL('http://grails.org'), title: 'grails')
groovy> b1.save()
groovy> go

===> Bookmark : 1

groovy> b2 = Bookmark.get(1)
groovy> go

===> Bookmark : 1

groovy> b1.addTag(new Tag(name: 'grails')).addTag(new Tag(name: 'web framework'))
groovy> go
[DEPRECATED] Property or method [addTag] of class [Bookmark] is deprecated in [0.5.6] and will be removed in future releases
[DEPRECATED] Property or method [addTag] of class [Bookmark] is deprecated in [0.5.6] and will be removed in future releases

===> Bookmark : 1

addTag已经不建议使用了。那以后用什么方法替代?
agile_boy 2007-07-05
可否详细一点啊,addTag好像是Bookmark的一个方法吧?
zengsun 2007-07-05
agile_boy 写道
可否详细一点啊,addTag好像是Bookmark的一个方法吧?

哦,我是按照<<The Definitive Guide to Grails>>写的:
目前有两个domain对象:
Bookmark.groovy
class Bookmark {
	static hasMany = [tags: Tag]
	
	URL url
	String title
	String notes
	Date dateCreated = new Date()
	static constraints = {
		notes(nullable: true)
	}
}


Tag.groovy
class Tag { 
	static belongsTo = Bookmark
	
	Bookmark bookmark
	String name
}	

然后在shell中执行上述代码,addTag是自动的方法。
在<<The Definitive Guide to Grails>>没有提到这个问题,
但我在官方提供的用户手册中找到了替代的方法:addToTags。

但是现在的问题就更加让我郁闷了!
groovy> println Bookmark.count()
groovy> go
0

===> null

groovy> b1 = new Bookmark(url: new URL('http://grails.org'), title: 'grails').addToTags(name: 'grails').addToTags(name: 'java ror').save()
groovy> go

===> Bookmark : 1

groovy> b2 = Bookmark.get(1)
groovy> go

===> Bookmark : 1

groovy> b2.tags.each { println it.name }
groovy> go
failed to lazily initialize a collection of role: Bookmark.tags, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Bookmark.tags, no session or session was closed

hibernate报延迟初始化错误!不知是怎么会事?
agile_boy 2007-07-05
GORM我用的不多。
http://jira.codehaus.org/browse/GRAILS-812
应该跟你的错误差不多吧,我看在0.4.2就close了啊
zengsun 2007-07-05
agile_boy 写道
GORM我用的不多。
http://jira.codehaus.org/browse/GRAILS-812
应该跟你的错误差不多吧,我看在0.4.2就close了啊

虽然错误的结果相同,但产生错误的原因不同!
我反复的实验,发现如果先Bookmark.list()一下,以后就不会出现错误了!
zengsun 2007-07-06
有没有那位遇到这个问题。
我是按照书上一模一样作的。
不可能取到bookmark的一个对象,取不到tags属性也算正常吧!
有没有高手可以说明一下!!!
zengsun 2007-07-07
哎,怎么没有人理我!!!
agile_boy 2007-07-09
zengsun 写道
哎,怎么没有人理我!!!

你能把你的代码上传上来,以及运行环境说明一下么?这样大家也可以一块来看看,你的问题,如何?
zengsun 2007-07-10
agile_boy 写道
zengsun 写道
哎,怎么没有人理我!!!

你能把你的代码上传上来,以及运行环境说明一下么?这样大家也可以一块来看看,你的问题,如何?

好呀,谢谢!我但我没有找到上传的地方。
而且发现这个问题只在shell中有,到了web页面上没有出现错误!!!
agile_boy 2007-07-10
zengsun:
在你的主页提供下载地方,在这里做个URL连接应该是可以的吧
Global site tag (gtag.js) - Google Analytics