0

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

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

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

我想过:

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

1 回答 1

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

于 2013-03-07T14:27:46.727 回答