我有一个休眠对象,我正在使用 session.saveOrUpdate 进行持久化,而没有提交给我对象 ID 的数据库。我将对象 id 传递给我的接口,稍后将用于在提交时重建对象。当我提交表单时,我不再能够进行会话查询来检索对象,因为从技术上讲,该对象在数据库中不存在。
有人知道如何检索该对象吗?如果我只是创建一个新对象,数据库 id 将失去控制。有什么想法吗?
问题编辑和澄清。
当表单提交并包含错误时,我需要捕获错误并重新加载包含错误的页面。我一直遇到的问题是我丢失了我的收藏中的非持久数据。我的解决方案是将当前对象与所有子对象临时保存到用户会话中,然后在页面重新加载后将保存的对象复制回主对象,这将返回所有用户以前的数据。但是,我遇到了无法懒惰地初始化角色集合的问题:这就是我求助于 session.update 之类的事务的原因。这解决了这个问题,但在实际保存到数据库之前,在验证错误之前为新创建的对象提供了 ID。
代码示例
@Property
private PurchaseRequest pr;
@Persist
private PurchaseRequest prPersist;
Class<?> onActivate(Long prId) {
if(request.isXHR()) {
return null;
}
PurchaseRequest purchaseRequest = null;
if(prPersist != null) {
session.update(prPersist);
purchaseRequest = prPersist;
prPersist = null;
} else {
purchaseRequest = (PurchaseRequest) session.createCriteria(PurchaseRequest.class)
.add(Restrictions.idEq(prId))
.uniqueResult();
}
this.pr = purchaseRequest;
}
验证方法
void onValidateFromPR() throws Exception {
if (form.getHasErrors()) {
prPersist = this.pr;
return Page.Index;
}
}