当前位置: 首页 > 面试题库 >

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

佴普松
2023-03-14
问题内容

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

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我试图使用开源的apache kafka运行Kafka连接器(不是使用confluent) 这很好,但这种方式只启动Kafka连接工作程序,我如何加载社区连接器? 我尝试了上面的两个命令,都没有给出错误,但无法加载连接器模块。另一个问题,我键入什么命令来检查连接器的状态?

  • 我正在构建一个反向代理服务器,它将授权http请求并将其传递给一些内部API。 我根据DB中的条目授权传入请求。 这个项目中的性能是优先的——反向代理服务器不应该增加太多响应时间。 简而言之: 我正在使用来查询数据库。我在Spring配置中的init期间打开Hibernate会话: 然后我将会话注入DAO层,并在read方法中使用它: 正如您所看到的,我并不是在每次DAO调用中都关闭/打开会话。我

  • 我正在编写一个服务器应用程序及其客户端对应物,它们都使用Netty作为网络层。我发现自己面临着将密码从客户端发送到服务器的典型安全问题,因此我认为SSL是最安全的方法。 我知道securechat示例,并将使用它来相应地修改我的管道。但是,我也想在密码传输后禁用SSL,并确认在服务器端节省一些宝贵的CPU周期,这可能会忙于许多其他客户端。ChannelPipeline留档声明: 一旦连接,通道和管

  • 我有访问密钥、密钥、区域和dynamo DBendpoint,通过它们我可以连接到数据库,并且我在应用程序中保留了配置。属性文件。现在的要求是不在应用程序中保留访问密钥和密钥。属性文件并遵循AWS STS中的Web标识令牌。我已从应用程序中删除访问密钥和密码。属性文件,并具有以下配置。当我启动应用程序时,我收到以下消息 考虑定义COM类型的bean。亚马逊。服务。发电机BV2。AmazonDyna

  • 我正在尝试在eclipse中设置Hibernate Tools。问题是它找不到任何映射文件。 我创建了一个控制台配置,指向我的environment.properties文件和hibernate.cfg.xml.问题是hibernate.cfg.xml.中没有映射 看起来它在myproject持久化中使用了spring bean sessionFactory。xml(如下)来查找所需的映射文件。我

  • 我在运行的spring boot app for db2数据库中收到错误。重新启动应用程序时,连接开始工作。 如果收到或错误,则需要在运行时重新连接到数据库。 做这件事的最好方法是什么?我正在使用Hikari连接池,是否有一些属性允许数据库连接被检查..如果中断..然后重新连接。或者像@refreshScope这样的Spring Boot配置在配置更改后重新创建bean。在这种情况下,有什么spr