我正在开展一个项目,我有两个域名。
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")
但在这种情况下,我也得到同样的错误。我正在以这种方式工作,因为我在遗留代码中工作,所以我无法改变太多。有解决方法吗?
答案 0 :(得分:1)
您显然正在更改您设置的authorInstance的某些字段。这就是TransientObjectException
所说的:"object references an unsaved transient instance"
。请阅读并引用错误消息。
保存图书前保存Author
。或者不要修改它。
答案 1 :(得分:0)
顺便说一句,您可能的替换代码存在另一个问题。而不是:
def bookInstance = new Book(aI, title: "Foo")
你需要
def bookInstance = new Book(author:aI, title: "Foo")
Book有一个内存构造函数声明,它接受一个Map对象,“author”和“title”是该Map的键。然后,此结构使用映射来初始化类成员。