0

我正在做一个项目,我有两个域。

class Author {
     Book book
     String name
}

class Book {
     Author author
     String title
}

我已经在数据库中保存了域作者的一个实例,并且在服务中我做了这样的事情:

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")

但在这种情况下,我也会遇到同样的错误。我以这种方式工作是因为我使用的是遗留代码,所以我不能改变太多。有解决办法吗?

4

2 回答 2

1

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

保存Author之前保存一本书。或者不要修改它。

您可能想使用hasManybelongsTo

于 2012-09-14T09:42:07.267 回答
0

顺便说一句,您可能的替换代码还有另一个问题。代替:

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

你需要

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

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

于 2013-10-11T19:23:30.463 回答