gpt4 book ai didi

java - 从 Spring Web 应用程序捕获用户名以供触发器使用

转载 作者:行者123 更新时间:2023-12-01 09:08:31 25 4
gpt4 key购买 nike

我想在数据库中保存有关历史的信息,例如用户“dog”在表“garden”中编辑了字段“grass”。

我有触发器可以正确保存所有内容,但我对用户名“dog”有问题。用户名是记录的用户名,我现在不知道如何“捕获”它,因为我不知道如何告诉我的数据库(PostgreSQL)这个特定用户这样做了。

我如何告诉我的触发器应该使用值“dog”?

我想使用 Spring Framework 和 Hibernate Framework 用 Ja​​va 编写一个应用程序。我没有任何应用程序代码,因为现在我正在创建数据库并考虑我 future 的应用程序。

有什么想法吗?

最佳答案

对于某些数据库平台,它们提供上下文参数。要使用这些,您将:

  1. 设置数据库上下文参数。
    您只需使用 SessionEntityManager 公开的 native SQL 接口(interface)即可完成此步骤。
  2. 使用 Session 注册 AfterTransactionCompletionProcess
    这基本上应该使用提供的 Session 并清除您在 (1) 中设置的数据库上下文参数。无论交易是否成功,您都希望执行此操作。此步骤可确保在将 JDBC 连接返回到连接池之前清除这些上下文参数。
  3. 执行正常的 ORM 更改。

但是可能有一种更简单的方法,称为 Hibernate Envers。

Hibernate Envers 旨在镜像映射的 @Entity 类并保留对实体所做更改的运行历史记录。如果您只对历史记录感兴趣的字段的子集,您可以轻松配置要审核的字段。此外,Envers API 还为您提供了一种查询历史表并获取历史快照的简单方法。

为了使用 Hibernate Envers 存储您的用户名 "dog",您只需实现一个包含您的 userName 的自定义 RevisionEntity字段并设置它。您可以找到有关如何为此配置必要组件的更多信息here .

关于java - 从 Spring Web 应用程序捕获用户名以供触发器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41067934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com