el objeto hace referencia a una instancia transitoria no guardada: cómo vaciar o devolver el objeto guardado

Yo uso Spring 3.2.3 y Hibernate 4.2.3 y JDK 7.

Tengo una entidad simple:

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

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

Guardé una instancia de esta entidad usando una@Service clase anotada con un@Transactional método anotado que utiliza un DAO que guarda la entidad con

sessionFactory.getCurrentSession().save(object);

Después de eso utilicé elsalvado Language entidad para crearEntityX, que lo usaba en unaManyToOne relación ...

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

yEntityX Se define como ...

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

Siempre tengo la excepcion

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

Intento usar algunas definiciones en cascada enEntityXrelación conLanguage Como se sugiere en otras publicaciones, pero no tiene efecto.

Si recargo lo guardadoLanguage entidad por encontrarlo por sucode utilizando alguna consulta HQL, entonces todo funciona bien, pero está lejos de ser "agradable".

Desafortunadamente, elsave(...) métodos deorg.hibernate.Session No devuelve el objeto guardado.

¿Alguien tiene alguna idea de cómo resolverlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta