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 wEntityX
zwią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ć?