我有一个用于审核数据修改的触发器。我需要在每次JDBC调用之前发送一个查询,以便将用户ID发送给Firebird。我如何在Hibernate中使用它?
JDBC查询示例:
select rdb$set_context('USER_SESSION','CURRENT_USER', ?) from rdb$database
答案 0 :(得分:2)
我知道实现这个目标的两种方法:
执行本机查询以设置值:
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
获取结果是必要的,因为获取结果将实际设置上下文变量。
展开到休眠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实现与原生查询(以及您问题中的查询)的执行方式相同。