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 enEntityX
relació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?