hibernate - 使用 Hibernate 或 JDBC 将用户从 Java 中的用户 session 传递到 Firebird 触发器

标签 hibernate jdbc firebird jaybird

我有一个用于审核数据修改的触发器。我需要在每次 JDBC 调用之前发送一个查询,以便它将用户 ID 发送到 Firebird。我如何将它与 Hibernate 一起使用?

JDBC查询示例:

select rdb$set_context('USER_SESSION','CURRENT_USER', ?) from rdb$database

最佳答案

我知道有两种方法可以实现这一目标:

  1. 执行 native 查询来设置值:

    EntityManager em = emf.createEntityManager();
    Query contextSetQuery = em.createNativeQuery(
            "select rdb$set_context('USER_SESSION','CURRENT_USER', ?) from rdb$database");
    contextSetQuery.setParameter(1, "MARK_NATIVE");
    contextSetQuery.getSingleResult();
    
    // other stuff
    

    获取结果是必要的,因为获取结果才是实际设置上下文变量的原因。

  2. 解包到 Hibernate Session 并在连接上设置客户端信息属性

    EntityManager em = emf.createEntityManager();
    Session session = em.unwrap(Session.class);
    session.doWork(connection -> connection.setClientInfo("CURRENT_USER", "MARK_CLIENT_INFO"));
    
    // other stuff
    

    Connection.setClientInfo 的 Jaybird 实现将执行与 native 查询(以及您问题中的查询)相同的操作。

关于hibernate - 使用 Hibernate 或 JDBC 将用户从 Java 中的用户 session 传递到 Firebird 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49413788/

相关文章:

java - 我正在尝试创建一个简单的 hibernate 应用程序。它给出以下错误。如何解决该错误

mysql - 了解 MySQL Connector/J 的 FOSS 异常

java - 将 java.util.logging 与 JDBC 驱动程序一起用于 HyperSQL 数据库引擎

node.js - Firebird DB 连接错误

spring-mvc - 从 DB 获取 Blob 抛出 "invalid transaction handle"

Java解析DateTime并忽略时区

java - Hibernate Oracle12c方言可以使用hibernate 4.3吗

java - Spring 3.2 + Hibernate 4.3.4 + jUnit : EntityManagerFactory is closed

java - 如何在 sqljdbc4.jar 中配置 Java Kerberos

c# - Firebird 客户端安装