【问题标题】:JPA Audit/History-Data with existing Database-Triggers具有现有数据库触发器的 JPA 审计/历史数据
【发布时间】:2013-02-22 12:52:32
【问题描述】:

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

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

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

我想过:

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

【问题讨论】:

    标签: java sql database jpa audit-tables


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 2015-01-10
      • 2013-01-05
      • 2017-05-02
      • 2017-04-12
      • 1970-01-01
      • 2012-11-22
      相关资源
      最近更新 更多