使用Hibernate或JDBC将用户从Java用户会话传递到Firebird Trigger

时间:2018-03-21 18:13:16

标签: hibernate jdbc firebird jaybird

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

JDBC查询示例:

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

1 个答案:

答案 0 :(得分:2)

我知道实现这个目标的两种方法:

  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. 展开到休眠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实现与原生查询(以及您问题中的查询)的执行方式相同。