0

私のシナリオでは、aは 1 日にPLAYER2 回実行できますACTIONS(たとえば、1 日に 2 人の他のプレイヤーを攻撃できます)。と の 2 つの永続クラスを実装PlayerActionました。Actionクラスには、まさにこのアクションへの参照とPlayerそのアクションの参照がありDateます (日付には、2013-01-15 00:00:00 などの日付部分のみが含まれます)。Action特定の日付のレコード数を 2 に制限するデータベース レベルの制約を作成したいと考えています。システムは高度に並行しており、アプリケーション レベルのチェックは通常失敗するため、プレイヤーは 3 ~ 4 つのアクションを同時に実行できます。

私の現在の解決策は、 、、へのPlayerDayActions参照を持つ3 番目のバージョン管理されたエンティティを実装することです。したがって、プレーヤーがすでに実行したアクションの数を確認するかどうかを確認できます。バージョン オンでは、同時に変更されたインスタンスが存在する場合、そのインスタンスを上書きすることはできません。スケーリングするために、action1 と action2 をリストに変更し、そのようなリストを確認できます。playerdateaction1action2action1 IS NULLaction2 IS NULLPlayerDayAction

問題に対して、よりクリーンでスケーラブルなソリューションはありますか? Hibernate のプレーン SQL では? ありがとう。

4

1 に答える 1

0

3番目のテーブルPlayerDayActionを作成する場合は、Player、date、actionの列を作成します。アクションごとにレコードを追加し、IF(PLAYER HAS EQUAL TO 2 ACTIONS TODAY)はアクションを許可しません。履歴目的のデータが必要でない限り、テーブルが大きくなりすぎないように、毎晩または毎週データを削除することもできます。

それは私がそれをする方法です:)。

于 2013-01-15T18:53:30.800 に答える