JPA审计/历史数据与现有数据库触发器

问题描述:

我正在添加JPA应用程序到许多现有应用程序(用MS Access,Delphi,Perl,C#,PHP等编写)的复杂系统中。基础MS-SQL数据库使用数据库触发器在历史数据库表中写入任何已更改数据库条目的副本,并添加SYSTEM_USERGETDATE()。由于我的新JPA应用程序使用连接池 - 我们的技术用户(用户:“Java”)始终会对数据库表进行所有更改,并且JPA应用程序的所有历史数据库表条目将始终具有“Java”作为SYSTEM_USER。JPA审计/历史数据与现有数据库触发器

如何让历史表中的条目自动创建 - 不丢弃现有的触发器?

我想过:

  1. 告诉现有的触发器不启动,当用户的“Java”修改表和创建我自己的历史数据库表中的条目。因此,我不得不为每个历史数据库表创建许多新的实体类。不太方便。
  2. 禁用连接池并为每个修改创建一个单独的连接 - 使用实际用户连接到数据库。但是这会有性能上的缺陷。我不知道如何禁用连接池。
  3. 使用临时表来始终存储当前用户 - 并且数据库触发器应该在创建历史数据库表中的条目时使用该存储的用户
  4. 在操作后手动更改历史数据库表中的用户。

1 - 如果您使用的是EclipseLink,您可能会使用其历史记录支持。 请参阅:http://wiki.eclipse.org/EclipseLink/Examples/JPA/History

2 - 在EclipseLink中,您可以为createEntityManager()提供用户/密码属性以使用非共用连接。 请参阅,http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditing#Provide_each_application_user_with_a_database_user_id

4 - 您可以使用JPA或EclipseLink事件。