使用 Hibernate 或 JDBC 将用户从 Java 中的用户会话传递到 Firebird 触发器

Passing user from user session in Java to Firebird Trigger using Hibernate or JDBC

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

JDBC查询示例:

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

我知道有两种方法可以实现:

  1. 执行本机查询以设置值:

    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 实现将执行与本机查询(以及您问题中的查询)相同的操作。