0

私はプロジェクトに取り組んでおり、2 つのドメインを持っています。

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

しかし、この場合も同じエラーが発生します。私はレガシーコードで作業しているため、この方法で作業しているため、あまり変更できません。これに対する回避策はありますか?

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 に答える