如何在 Hibernate SessionFactory 创建新连接后立即 运行 SQL 查询?
How to run an SQL query right after Hibernate SessionFactory creates a new connection?
我的服务器使用 Hibernate 以连接到 MySQL 数据库。我还使用 c3p0 进行连接池。我想在创建每个连接时对每个连接执行一次特定的 sql 查询,但由于我使用的是 ComboPooledDataSource
,因此无法检测何时创建新会话。
我发现我可以通过在结帐时启用测试连接来 运行 我的查询,并将我想要 运行 的查询设置为首选测试查询(但它可以 运行 不止一次)。
String query = "my query";
comboPooledDataSource.setTestConnectionOnCheckout(true);
comboPooledDataSource.setPreferredTestQuery(query);
有没有更优雅的方法来完成这个?
* 编辑 *
我正在尝试让我的数据库接受 utf8mb4 字符。
可接受的方法是将以下内容应用于 my.cnf 文件:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
问题是除了我的数据库我无法访问任何东西,所以我的解决方案是为每个连接执行 SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
。
参见 c3p0 的 ConnectionCustomizer interface. Override the onAcquire(...)
method of AbstractConnectionCustomizer。 onAcquire(...)
每个连接只调用一次,在从数据库中获取后,在可供客户端检出之前。
或者,如果您愿意,您可以使用 c3p0 的内置示例来处理此类用例,com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer
在c3p0.properties中:
c3p0.connectionCustomizerClassName=com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer
c3p0.extensions.initSql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
我的服务器使用 Hibernate 以连接到 MySQL 数据库。我还使用 c3p0 进行连接池。我想在创建每个连接时对每个连接执行一次特定的 sql 查询,但由于我使用的是 ComboPooledDataSource
,因此无法检测何时创建新会话。
我发现我可以通过在结帐时启用测试连接来 运行 我的查询,并将我想要 运行 的查询设置为首选测试查询(但它可以 运行 不止一次)。
String query = "my query";
comboPooledDataSource.setTestConnectionOnCheckout(true);
comboPooledDataSource.setPreferredTestQuery(query);
有没有更优雅的方法来完成这个?
* 编辑 *
我正在尝试让我的数据库接受 utf8mb4 字符。 可接受的方法是将以下内容应用于 my.cnf 文件:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
问题是除了我的数据库我无法访问任何东西,所以我的解决方案是为每个连接执行 SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
。
参见 c3p0 的 ConnectionCustomizer interface. Override the onAcquire(...)
method of AbstractConnectionCustomizer。 onAcquire(...)
每个连接只调用一次,在从数据库中获取后,在可供客户端检出之前。
或者,如果您愿意,您可以使用 c3p0 的内置示例来处理此类用例,com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer
在c3p0.properties中:
c3p0.connectionCustomizerClassName=com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer
c3p0.extensions.initSql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci