Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对审核列使用触发器_Java_Hibernate_Orm_Triggers_Audit - Fatal编程技术网

Java 对审核列使用触发器

Java 对审核列使用触发器,java,hibernate,orm,triggers,audit,Java,Hibernate,Orm,Triggers,Audit,在我的公司,我是一名java开发人员,我们使用hibernate orm。 由于与数据相关的目的,数据架构师希望每个数据库上的每个表都有审计列(CREATE_DATE、CREATED_BY、UPDATE_DATE、UPDATED_BY)。这似乎有点奇怪,因为我们在应用程序业务中不使用这些字段 我想,对于我们的java应用程序,我们有两种选择: 在每个hibernate dao对象上使用这些审计字段创建基类 定义表触发器以更新这些列 我应该选择哪一个?为什么?还有其他建议吗?根据我的理解和经验

在我的公司,我是一名java开发人员,我们使用hibernate orm。 由于与数据相关的目的,数据架构师希望每个数据库上的每个表都有审计列(CREATE_DATE、CREATED_BY、UPDATE_DATE、UPDATED_BY)。这似乎有点奇怪,因为我们在应用程序业务中不使用这些字段

我想,对于我们的java应用程序,我们有两种选择:

  • 在每个hibernate dao对象上使用这些审计字段创建基类
  • 定义表触发器以更新这些列

我应该选择哪一个?为什么?还有其他建议吗?

根据我的理解和经验,第二个选项是两个选项中唯一的好选项。这是因为,如果数据从应用程序外部更新/填充到表中(批处理作业/数据修复等),那么第一个选项将不起作用

另一个选项是,如果数据更新仅通过PL SQL进行,您的PL SQL团队可以更改该代码以更新代码中的这些列。然而,如果代码庞大,这将是大量的工作


总的来说,触发器似乎是最好的选择。

我非常惊讶数据架构师给了您这个选择。审核列应该由触发器设置和更新,而不依赖于代码来管理它们。它们不是供您的代码使用的,甚至不需要注意,它们将在需要时审核行更新以进行法医分析。请查看Hibernate Envers:@ErwinBolwidt I know Envers。您是否建议使用envers的选项1?我建议您使用已经存在的东西,而不是自己构建它。但“我应该选择哪一个?为什么?还有其他建议吗?”是“主要基于观点,太宽泛了。”。正如您现在所问的,对于SO格式来说,这不是一个好问题。请在这里阅读关于提出好问题的说明。