我使用 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不返回保存的对象。
有没有人知道如何解决它?