obiekt odwołuje się do niezapisanej instancji przejściowej: jak opróżnić lub zwrócić zapisany obiekt

Używam Spring 3.2.3 i Hibernate 4.2.3 i JDK 7.

Mam prosty byt:

@Entity
public class Language {
    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false, length = 3, unique = true)
    private String code;
}

Zapisałem instancję tego obiektu za pomocą a@Service klasa z adnotacją a@Transactional metoda z adnotacjami, która używa DAO, który zapisuje obiekt za pomocą

sessionFactory.getCurrentSession().save(object);

Potem użyłemzapisane Language jednostka do tworzeniaEntityX, który używał go wManyToOne relacja ...

lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);

iEntityX jest zdefiniowany jako ...

@Entity
public class EntityX {
    @ManyToOne
    @JoinColumn(nullable = false)
    private Language language;
        // ...
}

Zawsze otrzymuję wyjątek

Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language

Próbuję użyć niektórych definicji kaskadowych wEntityXzwiązek zLanguage jak zasugerowano w innych postach, ale nie ma to wpływu.

Jeśli przeładuję zapisaneLanguage byt poprzez odnalezienie go przezcode używając jakiegoś zapytania HQL, wszystko działa dobrze, ale daleko mu do bycia „ładnym”.

Niestetysave(...) metodyorg.hibernate.Session nie zwraca zapisanego obiektu.

Czy ktoś ma jakieś pomysły, jak go rozwiązać?

questionAnswers(2)

yourAnswerToTheQuestion