对于 EJB 2.x CMP 实体 bean,可以在关系数据库表中添加列来进行冲突检测。此冲突检测列是用来确定是否已更新记录的附加数据库列。要管理冲突检测列,将需要提供您自己的数据库触发器实现。
选择添加列以进行冲突检测而不是使用
在乐观访问意向的谓词中包括属性的其它乐观并发性控制方案,以下列出了这种方式的优点:
- 在过度限定的 UPDATE 语句中,只需要冲突检测列和主键。检查这两列可减少通过使用多个选择的
optimistic 谓词执行的 I/O 操作次数。
- 使用冲突检测列克服了 optimistic 谓词不能映射至可空列或不支持乐观并发性控制的数据类型(如 BLOB 和 CLOB)的局限性。
以下是使用冲突检测列的限制:
- 不支持对冲突检测列中的值进行任何修改或更新。
- 如果选择使用冲突检测列,则会优先使用冲突检测列而不是其它乐观并发性控制方案(即,在乐观访问意向的谓词中包括属性)。另外,将对乐观访问意向忽略所有 optimistic 谓词设置。
- 添加列以进行冲突检测可用于自顶向下映射和中间会合映射。不支持自底向上映射1。
- 以“DISCRIM”或“OCC_”开头的列名是 EJB 映射工具的保留名称。
- 不要将 CMP 字段名指定为以下列字符串开头:“DISCRIM”或“OCC_”。
- 不要将 CMP 与名称以下列字符串开头的另一 CMP 相关联:“DISCRIM”和“OCC_”。
选择下列其中一种方法来添加列以进行冲突检测: