objeto faz referência a uma instância transitória não salva: como liberar ou retornar o objeto salvo

Eu uso o Spring 3.2.3 e o Hibernate 4.2.3 e o JDK 7.

Eu tenho uma entidade simples:

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

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

Salvei uma instância dessa entidade usando um@Service aula anotada com um@Transactional método anotado que usa um DAO que salva a entidade com

sessionFactory.getCurrentSession().save(object);

Depois disso eu usei osalvou Language entidade para criarEntityX, que usou em umManyToOne relação ...

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

eEntityX é definido como ...

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

Eu sempre recebo a exceção

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

Eu tento usar algumas definições em cascata emEntityXrelação deLanguage como sugerido em outros posts, mas não tem efeito.

Se eu recarregar o salvoLanguage entidade por encontrá-lo por suacode usando alguma consulta HQL, então tudo funciona bem, mas está longe de ser 'legal'.

Infelizmente, osave(...) métodos deorg.hibernate.Session não retorna o objeto salvo.

Alguém tem alguma idéia de como resolvê-lo?