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

时间:2013-03-07 10:53:22

标签: java sql database jpa audit-tables

我将JPA应用程序添加到许多现有应用程序的复杂系统中(用MS Access,Delphi,Perl,C#,PHP等编写)。底层MS-SQL数据库使用数据库触发器在历史数据库表中写入任何已更改数据库条目的副本,并添加SYSTEM_USERGETDATE()

由于我的新JPA应用程序使用连接池 - 数据库表的所有更改将始终由我们的技术用户(用户:“Java”)进行,并且JPA应用程序的所有历史数据库表条目将始终具有“Java”作为SYSTEM_USER。

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

我想到了:

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

1 个答案:

答案 0 :(得分:0)

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事件。