小编典典

如何使用Hibernate在连接/会话开始时针对db运行SQL SET语句?

sql

我想在(数据库)会话开始时向数据库发送一些SQL。

例如SET TIME ZONE 'user-timezone',或将其客户端IP地址设置为自定义变量(postgres中为“ GUC”)。

如何在Hibernate中自动执行此操作?

EclipseLink有一个postAcquireClientSession事件,但是我没有在Hibernate中看到一个事件。


阅读 194

收藏
2021-04-28

共1个答案

小编典典

执行此操作的更简单方法是实现自定义org.hibernate.service.jdbc.connections.spi.ConnectionProvider,此处提供一个示例并覆盖getConnection,以便它运行SQL。

其他更麻烦,可能无法使用的方法包括使用Integrators设置事件侦听器,这些侦听器在错误的级别进行侦听,并在以下“堆栈溢出”问题中列出。可从此处获得有关集成商的信息。

诸如事件侦听器之类的侦听器也会以错误的级别进行侦听。他们的一个例子在这里

其他更复杂的方法是对SessonFactory实现进行子类化,以允许您查看自定义统计信息提供程序,如果启用了统计信息,则该提供程序将在JDBCContext中的connectionOpened回调中被调用。

或者,您可以将SessonFactory实现和JDBC上下文实现或会话实现子类化,以自定义相同的connectionOpened回调以运行SQL。

2021-04-28