grails中的TransientObjectException

时间:2012-09-14 02:36:56

标签: grails

我正在开展一个项目,我有两个域名。

class Author {
     Book book
     String name
}

class Book {
     Author author
     String title
}

我在数据库和服务中保存了域Author的实例,我做了类似的事情:

def authorInstance = Author.getById(1)
def bookInstance = new Book(author:authorInstance, title: "Foo")

但是我不保存bookInstance而是将其用于更多进程。这给了我org.hibernate.TransientObjectException。我也尝试过这样的事情:

def authorInstance = Author.getById(1)
def aI = authorInstance
def bookInstance = new Book(aI, title: "Foo")

但在这种情况下,我也得到同样的错误。我正在以这种方式工作,因为我在遗留代码中工作,所以我无法改变太多。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

您显然正在更改您设置的authorInstance的某些字段。这就是TransientObjectException所说的:"object references an unsaved transient instance"。请阅读并引用错误消息。

保存图书前保存Author。或者不要修改它。

您可能希望使用hasManybelongsTo

答案 1 :(得分:0)

顺便说一句,您可能的替换代码存在另一个问题。而不是:

def bookInstance = new Book(aI, title: "Foo")

你需要

def bookInstance = new Book(author:aI, title: "Foo")

Book有一个内存构造函数声明,它接受一个Map对象,“author”和“title”是该Map的键。然后,此结构使用映射来初始化类成员。