在我的场景中,a每天PLAYER
可以执行 2ACTIONS
次(例如,每天可以攻击 2 名其他玩家)。我实现了两个持久类:Player
和Action
. Action
类引用Player
了Date
这个动作(日期只包含日期部分,比如 2013-01-15 00:00:00)。我想创建一个数据库级别的约束,Action
将特定日期的记录数限制为 2。这将阻止玩家每天执行超过 2 个操作。该系统是高度并发的,应用程序级别的检查通常会失败,允许玩家同时执行 3-4 个动作。
我当前的解决方案是使用对、和PlayerDayActions
的引用来实现第三个版本化实体。因此,我可以检查或计算玩家已经执行了多少操作,并且版本将不允许覆盖同时修改的实例(如果有的话)。为了扩展,我可以将 action1 和 action2 更改为列表并检查这样的列表。player
date
action1
action2
action1 IS NULL
action2 IS NULL
PlayerDayAction
有没有更干净和可扩展的解决方案来解决这个问题?在休眠中的普通 SQL 中?谢谢。