Objekt verweist auf eine nicht gespeicherte transiente Instanz: wie gespeicherte Objekte geleert oder zurückgegeben werden
Ich verwende Spring 3.2.3 und Hibernate 4.2.3 und JDK 7.
Ich habe eine einfache Entität:
@Entity
public class Language {
@Id
@GeneratedValue
private long id;
@Column(nullable = false, length = 3, unique = true)
private String code;
}
Ich habe eine Instanz dieser Entität mit einem gespeichert@Service
Kommentierte Klasse mit einem@Transactional
Kommentierte Methode, die ein DAO verwendet, mit dem die Entität gespeichert wird
sessionFactory.getCurrentSession().save(object);
Danach habe ich dieGerettet Language
Entität zum ErstellenEntityX
, die es in einerManyToOne
beziehung ...
lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);
undEntityX
ist definiert als ...
@Entity
public class EntityX {
@ManyToOne
@JoinColumn(nullable = false)
private Language language;
// ...
}
Ich bekomme immer die Ausnahme
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language
Ich versuche, einige Kaskadendefinitionen in zu verwendenEntityX
Beziehung zuLanguage
wie in anderen Beiträgen vorgeschlagen, aber es hat keine Wirkung.
Wenn ich das Gespeicherte neu ladeLanguage
Entität, indem es durch seine zu findencode
mit einer HQL-Abfrage funktioniert dann alles gut, aber das ist weit davon entfernt, "nett" zu sein.
Leider ist diesave(...)
Methoden vonorg.hibernate.Session
gibt das gespeicherte Objekt nicht zurück.
Hat jemand eine Idee, wie man es löst?