2016-03-30 9 views
0

テーブル名にtable1というカラム名と姓があるとします。 2つの異なるクライアントがJavaアプリケーションから同じビューを開き、同時に同じ人物のデータを取得します。データベーステーブルへの上書き可能

1)最初のクライアントが名前を変更し、保存ボタンを押してデータベースレコードを更新しました。 2)Client2はまだ古いレコードを画面に表示してから、姓を変更するためにボタンを押して保存します。

実際に古い名前でレコードを上書きします。私は、ボタンをクリックするとデータベースを更新する前に最新のデータをチェックして取得すると思いますが、更新前に2番目のクエリを作成するため、このソリューションが気に入らないのです。

この問題を解決するには、Hibernateを使用し、Hibarneteを使用しないでください。何か案が?

答えて

1

もちろん、何かが上書きされたくない場合は、更新前にデータをチェックする必要があります。しかし、常に良いキャッシング戦略を持つ真のクエリではありません。また、最後の更新でタイムスタンプを使用すると、簡単に比較できます。もう1つの戦略は、最初のユーザーがそれらを読むときにエンティティをロックすることです。しかし、これは通常、Webアプリケーションの設計には適していません。また、メッセージングサービスを統合する必要があります。これは、すべてのユーザーが実際にそのエンティティを開いている更新を通知します。しかし、それは実装が簡単ではなく、より高度な機能であると私は思う。

要するに、エンティティのタイムスタンプを比較し、既に更新されている場合は、変更を比較し、そのエンティティを更新したいユーザーに表示します。

+0

また、Hibernate [transaction_manager](https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/transaction/Transaction/TransactionFactory.html)との並行アップデートや、誰かがJTAと最小のJPA 2.0を使用する場合、[Transactional API](https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/transaction/TransactionFactory.html) – Pintus

関連する問題