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 emEntityX
relaçã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?