オブジェクトIDを提供するデータベースにコミットせずに、session.saveOrUpdateを使用して永続化する休止状態のオブジェクトがあります。オブジェクト 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;
}
}