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 verwendenEntityXBeziehung 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?