代码之家  ›  专栏  ›  技术社区  ›  erickdeoliveiraleal

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

  •  2
  • erickdeoliveiraleal  · 技术社区  · 8 年前

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

    JDBC查询示例:

    select rdb$set_context('USER_SESSION','CURRENT_USER', ?) from rdb$database
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Mark Rotteveel    8 年前

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

    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
      

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