正确约束SQL和Hibernate中特定记录的数量

时间:2013-01-15 14:14:36

标签: sql hibernate gorm

在我的方案中,PLAYER每天可以执行2 ACTIONS(例如,每天可以攻击其他2名玩家)。我实现了两个持久化类:PlayerActionAction类引用了此动作的PlayerDate(日期仅包含日期部分,例如2013-01-15 00:00:00)。我想创建一个数据库级约束,将特定日期的Action个记录数限制为2.这将阻止玩家每天执行2个以上的操作。系统是高度并发的,应用程序级别的检查通常会失败,允许玩家同时执行3-4个动作。

我目前的解决方案是实施第三个版本化实体PlayerDayActions,并引用playerdateaction1action2。因此,我可以检查action1 IS NULLaction2 IS NULL是否计算玩家已经执行了多少操作,PlayerDayAction上的版本将禁止覆盖同时修改的实例,如果有的话。为了扩展,我可以将action1和action2更改为列表并检查这样的列表。

是否有针对此问题的更清晰,可扩展的解决方案?在Hibernate中的纯SQL?感谢。

1 个答案:

答案 0 :(得分:0)

如果您创建第三个表PlayerDayAction,则包含Player,date,action列。每个动作添加一个记录,并且IF(玩家等于2个动作)不允许动作。除非您希望数据用于历史目的,否则您甚至可以每晚或每周删除数据,因此表格不会太大。

我就是这样做的。)。