1

我的数据库中的每个表都有这些固定列:

  • 记录版本
  • 记录时间戳
  • 创建时间

由于 jooq功能record_version 和 record_timestamp 被自动处理。

是否可以集中和自动化create_time的维护?在内部,jooq 已经在管理前两个特殊领域。

我可以在某处放置一个处理程序来填充 create_time 值吗?这样做,我可以删除一些样板代码来初始化这个字段。

我在每个表上都有另一个字段:update_by_account;无论如何,如果我能够管理前面提到的字段(create_time),我想我也会处理这个字段。

提前致谢

4

1 回答 1

2

未来的 jOOQ 版本:

您正在寻找的是 和 的侦听器API 功能。从 jOOQ 3.0 开始还没有实现RecordUpdatableRecord

将来,此功能将允许在存储、插入、更新、删除等时向 jOOQ 的记录注入一些行为。这将包括您所请求的内容以及 jOOQ 当前对其所做的操作

  • record_version
  • record_timestamp

用于乐观锁定的列。

jOOQ 2.x 或 3.0 的解决方案:

您现在可以做的是实现 anExecuteListener并让它“检测”它是否应该变为活动状态并覆盖create_time. 这可能不得不求助于解析或至少正则表达式匹配您的 SQL 语句。

仅 SQL 的解决方案:

但是,在我看来,最好的选择create_time是为每个表编写一个触发器(Oracle 语法):

CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT
ON my_table
REFERENCING NEW AS new
FOR EACH ROW
BEGIN
    :new.create_time = SYSDATE;
END t_triggers_trigger;

这将保证无论您如何访问数据库,该值都是可用的......

于 2013-06-14T07:37:43.033 回答