我想在(数据库)会话开始时向数据库发送一些SQL。
例如SET TIME ZONE 'user-timezone',或将其客户端IP地址设置为自定义变量(postgres中为“ GUC”)。
SET TIME ZONE 'user-timezone'
如何在Hibernate中自动执行此操作?
EclipseLink有一个postAcquireClientSession事件,但是我没有在Hibernate中看到一个事件。
postAcquireClientSession
执行此操作的更简单方法是实现自定义org.hibernate.service.jdbc.connections.spi.ConnectionProvider,此处提供了一个示例并覆盖getConnection,以便它运行SQL。
其他更麻烦,可能无法使用的方法包括使用Integrators设置事件侦听器,这些侦听器在错误的级别进行侦听,并在以下“堆栈溢出”问题中列出。可从此处获得有关集成商的信息。
诸如事件侦听器之类的侦听器也会以错误的级别进行侦听。他们的一个例子在这里
其他更复杂的方法是对SessonFactory实现进行子类化,以允许您查看自定义统计信息提供程序,如果启用了统计信息,则该提供程序将在JDBCContext中的connectionOpened回调中被调用。
或者,您可以将SessonFactory实现和JDBC上下文实现或会话实现子类化,以自定义相同的connectionOpened回调以运行SQL。