2012-04-10 12 views
0

新しいオブジェクトを追加して.save()を実行すると、作成された最後のオブジェクトであるselectを実行すると、DBではなくクラスから取得されます。つまり、 SQL形式に変換され、フロントエンドのコードを掘り下げてしまいました。Hibernate、データベースからオブジェクトを強制的に取得する

例えば

Tue Feb 06, 2012代わりの2012-02-06 00:00:00

私のすべてのオブジェクトをデータベースから引き出さ得ることを確認する方法はありますか?

ありがとう

+0

オブジェクトをフェッチするために、間に任意のタイプのキャッシュを使用していますか? –

答えて

2

Hibernateには、いくつかのレベルのキャッシュがあります。あなたが経験しているのは、セッション/第1レベルのキャッシュです。それを無効にする方法はありません。しかし、このようなことを強く求めている場合は、StatelessSession http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/batch.htmlセクション15.3を使用して調べることができます。

正しく書式設定された日付文字列をユーザーに返すためにデータベースに依存している場合は、ユーザーインターフェイス、ビジネスロジック、および永続レイヤの分離を考え直すことをお勧めします。格納している/取得しているデータを理解できるかぎり、データベースまたはHibernateフォームの文字列の仕方には注意しないでください。 MVC、MVVM、または他の分離パターンを調べます。

+0

さて、私はあなたに聞いているので、私はMVCアーキテクチャーを持っています、そして、表示されたデータは、挿入が発生した後に完全に別のページ要求にあります。私はJSON形式のオブジェクト値をJSに送信して日付を処理し、自動的にDate.toString()メソッドを呼び出すgetDateアクセサを呼び出す自動化されたDTOクラスを使用しています。標準フォーマットを元に戻します。だから私はTostring waaの日付を上書きする必要がある – Baconbeastnz

0

デフォルトでは、get()またはloadはCacheから読み込み、データベースに見つからない場合はデータベースに移動します。その上にキャッシュにも追加されます。 appropraite LockModeでsession.get()が必要になります。デフォルトのLockMode.NONEではありません。

プラス私はsave()とget()の間で、saveオペレーションがデータベースに同期されていることを保証する必要があると思います。

+0

私はこれを間違った方法で行っている、私は私がウェブサイトの期間のセッションを開いたままにしておくと思っていた、各取引のためにそれを開いて閉じるべきですか? – Baconbeastnz

+0

右私はオブジェクトをコミットするたびにこの問題を修正しました。セッションを閉じると、毎回私はDBを選択します。新鮮なセッションを取得します。追加または更新するときにセッションをクローズするようにします。 – Baconbeastnz

+0

少し助けてくれてうれしいです。 –

関連する問題