Spring 3.2.3 と Hibernate 4.2.3 と JDK 7 を使用しています。
私は単純なエンティティを持っています:
@Entity
public class Language {
@Id
@GeneratedValue
private long id;
@Column(nullable = false, length = 3, unique = true)
private String code;
}
エンティティを保存するDAOを使用する注釈付きメソッドを@Service
持つ注釈付きクラスを使用して、このエンティティのインスタンスを保存しました@Transactional
sessionFactory.getCurrentSession().save(object);
その後、保存 Language
されたエンティティを作成EntityX
に使用し、ManyToOne
関係で使用しました...
lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);
とEntityX
定義されています...
@Entity
public class EntityX {
@ManyToOne
@JoinColumn(nullable = false)
private Language language;
// ...
}
私はいつも例外を受け取ります
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language
他の投稿で提案されているように、 とEntityX
の関係でいくつかのカスケード定義を使用しようとしましたが、効果はありません。Language
HQLクエリを使用して保存されたLanguage
エンティティを見つけてリロードするcode
と、すべて正常に動作しますが、「いい」とはほど遠いものです。
残念ながら、のsave(...)
メソッドorg.hibernate.Session
は保存されたオブジェクトを返しません。
それを解決する方法はありますか?