我使用 Spring 3.2.3 和 Hibernate 4.2.3 和 JDK 7。
我有一个简单的实体:
@Entity
public class Language {
@Id
@GeneratedValue
private long id;
@Column(nullable = false, length = 3, unique = true)
private String code;
}
我使用@Service
带有带注释的方法的带注释的类保存了该实体的实例,该@Transactional
方法使用 DAO 来保存实体
sessionFactory.getCurrentSession().save(object);
之后,我使用保存 Language
的实体进行创建EntityX
,它在ManyToOne
关系中使用它......
lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);
并且EntityX
被定义为...
@Entity
public class EntityX {
@ManyToOne
@JoinColumn(nullable = false)
private Language language;
// ...
}
我总是得到例外
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language
我尝试按照其他帖子中的建议使用与EntityX
' 相关的一些级联定义Language
,但它没有效果。
如果我Language
通过使用一些 HQL 查询找到它来重新加载保存的实体code
,那么一切正常,但它远非“好”。
不幸的是,save(...)
方法org.hibernate.Session
不返回保存的对象。
有没有人知道如何解决它?