使用jdbc / hibernate获取当前数据库事务ID?

时间:2015-04-27 11:33:50

标签: java mysql hibernate jdbc transactions

我已经在Google上浏览了这个,但找不到任何相关内容。基本上,我想掌握长期运行的交易。

现在,我浏览information_schema.INNODB_TRX或查看show engine innodb status的输出以找到trx_id,然后启用general_logs以查看所有查询的内容运行。

有没有办法,我可以使用transaction_idjdbc在我的代码中获取此hibernate,以便我可以在服务器日志中记录它?

1 个答案:

答案 0 :(得分:2)

使用PostgreSQL,您只需运行此本机查询即可获取当前的事务ID:

Number transactionId = (Number) session
   .createSQLQuery("select txid_current()")
   .uniqueResult();

对于MySQL,you need to run 5.7 or later

Number transactionId = (Number) session
   .createSQLQuery(
            "SELECT GTID " +
            "FROM events_transactions_current e " +
            "JOIN performance_schema.threads t ON e.THREAD_ID = t.THREAD_ID " +
            "WHERE t.PROCESSLIST_ID = CONNECTION_ID()")
   .uniqueResult();

或MySQL 5.5:

Number transactionId = (Number) session
   .createSQLQuery(
            "SELECT trx_id " +
            "FROM information_schema.innodb_trx " +
            "WHERE trx_mysql_thread_id = CONNECTION_ID()")
   .uniqueResult();