在我的方案中,PLAYER
每天可以执行2 ACTIONS
(例如,每天可以攻击其他2名玩家)。我实现了两个持久化类:Player
和Action
。 Action
类引用了此动作的Player
和Date
(日期仅包含日期部分,例如2013-01-15 00:00:00)。我想创建一个数据库级约束,将特定日期的Action
个记录数限制为2.这将阻止玩家每天执行2个以上的操作。系统是高度并发的,应用程序级别的检查通常会失败,允许玩家同时执行3-4个动作。
我目前的解决方案是实施第三个版本化实体PlayerDayActions
,并引用player
,date
,action1
和action2
。因此,我可以检查action1 IS NULL
或action2 IS NULL
是否计算玩家已经执行了多少操作,PlayerDayAction
上的版本将禁止覆盖同时修改的实例,如果有的话。为了扩展,我可以将action1和action2更改为列表并检查这样的列表。
是否有针对此问题的更清晰,可扩展的解决方案?在Hibernate中的纯SQL?感谢。
答案 0 :(得分:0)
如果您创建第三个表PlayerDayAction,则包含Player,date,action列。每个动作添加一个记录,并且IF(玩家等于2个动作)不允许动作。除非您希望数据用于历史目的,否则您甚至可以每晚或每周删除数据,因此表格不会太大。
我就是这样做的。)。