を洗い流すか、返すために私は春の3.2.3を使用し、4.2.3およびJDK 7オブジェクトが保存されていない一時的なインスタンスを参照します:どのように保存されたオブジェクト
休止状態私は、単純なエンティティがあります
@Entity
public class Language {
@Id
@GeneratedValue
private long id;
@Column(nullable = false, length = 3, unique = true)
private String code;
}
を私は私が使用その後
sessionFactory.getCurrentSession().save(object);
持つエンティティを保存DAOを使用@Transactional
注釈付きメソッドと@Service
注釈付きクラスを使用してこのエンティティのインスタンスを保存D は、私は常に例外を取得
@Entity
public class EntityX {
@ManyToOne
@JoinColumn(nullable = false)
private Language language;
// ...
}
... ...
lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);
とEntityX
をManyToOne
関係でそれを使用しEntityX
を作成するためのLanguage
エンティティは次のように定義されてを保存しました
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language
私はいくつかのカスケード定義をEntityX
'他の投稿に示唆されているようにLanguage
との関係ですが、効果はありません。
保存されたLanguage
エンティティを、一部のHQLクエリを使用してcode
で検索して再読み込みすると、すべて正常に動作しますが、「良い」とはかなり離れています。
save(...)
メソッドorg.hibernate.Session
は、保存されたオブジェクトを返しません。
誰もがどのようにそれを解決するためのアイデアを持っていますか?
コードは単一の '@ Transactional'メソッド内にあります。サービスメソッドも '@ Transactional'ですが、新しいトランザクションは必要ないので、既存のものが使われていると思います。私は1つの言語エンティティと多くのEntityXを持ち、それぞれが同じ言語エンティティを使用しているため、独自の言語を保存しました。 – t777
私の編集をチェックしてください。コメントが長すぎます。私は明確であることを願っています、英語は母国語ではありません、ごめんなさい –
こんにちは@ LucaBassoRicci、私は同じ問題を抱えていますが、私の技術は異なっています、あなたはこれを見てみることができます.. http://stackoverflow.com/questions/28279304 /保存時のエラー - オブジェクト - 外部キーオブジェクト参照 - 非保存 - –