私は現在、休止状態とスプリングを使用するクイズツールに取り組んでいます。私は実際にSakaiLMSツールとして構築しているので、この質問はもう少し複雑になりますが、一般化できるかどうかを確認します。
私の現在のシナリオは、ユーザーがStartQuizページに移動し、ページでフォームを送信すると、Attemptオブジェクト(休止状態で保存)を初期化する場合です。以下のオブジェクトにデータを入力します。
<class name="org.quiztool.model.Attempt" table="QT_ATTEMPTS">
<cache usage="transactional" />
<id name="id" type="long">
<generator class="native">
<param name="sequence">QT_ATTEMPTS_ID_SEQ</param>
</generator>
</id>
<many-to-one name="quizId" class="org.quiztool.model.Quiz" cascade="none" />
<property name="score" type="int" not-null="true" />
<property name="outOf" type="int" not-null="true" />
<list name="responses" cascade="none" table="QT_RESPONSES" lazy="false">
<key column="id"/>
<index column="idxr"/>
<many-to-many class="org.quiztool.model.QuizAnswer" />
</list>
<list name="questionList" cascade="none" table="QT_ATTEMPT_QUESTIONS" lazy="false">
<key column="id"/>
<index column="idxq"/>
<many-to-many class="org.quiztool.model.QuizQuestion" />
</list>
<property name="userId" type="string" length="99" />
<property name="siteRole" type="string" length="99" />
<property name="startTime" type="java.util.Date" not-null="true" />
<property name="finishTime" type="java.util.Date" />
</class>
一連の質問をランダムに選択し、開始時刻とその他のいくつかのプロパティを設定し、休止状態でオブジェクトを保存した後、ユーザーをTakeTheQuizページにリダイレクトします。
TakeTheQuizページでは、リクエストパラメータとして渡されたIDで試行オブジェクトを読み込み、ユーザーがクイズに記入できるように、それを印刷してhtmlフォームにフォーマットします。約2/5の同時ユーザーには質問が表示されません。試行オブジェクトがロードされ、その質問は空です。
私の理論では、Attemptオブジェクトの質問リストは、データベースにすぐに挿入されていません(オブジェクトが休止状態のキャッシュに移動する限り問題ありません。その後、キャッシュから取得できますが、これはわかりません。方法を説明します)またはデータベースに保存していますが、TakeTheQuizページでのオブジェクトのロードがキャッシュから不完全なオブジェクトを読み取っています。
確かに私のHibernateの知識は限られているので、誰かがここで何が起こっているのか、そしてそれを修正する方法を理解するのを手伝ってくれるなら、私に知らせてください。