强制 Hibernate 不使用 sp_execute 进行非查询

Posted

技术标签:

【中文标题】强制 Hibernate 不使用 sp_execute 进行非查询【英文标题】:Forcing Hibernate not to use sp_execute for non-query 【发布时间】:2011-12-21 16:43:01 【问题描述】:

有没有办法强制 Hibernate 不使用 sp_execute?

考虑这段代码

String queryString = "SET DEADLOCK_PRIORITY LOW;";
SQLQuery query = session.createSQLQuery(queryString);
return query.executeUpdate();

它变成sp_prepare,然后是sp_execute,这违背了目的:执行此语句后会话死锁优先级回到NORMAL

在 .NET 中,以下代码将直接执行该语句,并且会话的优先级保持为低(根据需要)

command = new SqlCommand("SET DEADLOCK_PRIORITY LOW", _Connection);
command.ExecuteNonQuery();

如何强制Hibernate以同样的方式发送语句?

【问题讨论】:

ORM 之类的 hibernate 有其局限性。一旦你到达它们,最好完全放弃休眠,至少在你跨越限制的部分。 【参考方案1】:

我找到了实现这一点的方法。

String statementText = "SET DEADLOCK_PRIORITY LOW;";
Statement s = session.connection().createStatement();
s.execute(statementText);

然而,connection() 已“在 Hibernate 4.x 中被弃用并计划删除”(讨论 here)

【讨论】:

以上是关于强制 Hibernate 不使用 sp_execute 进行非查询的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate/JPA:如何强制隐式连接使用 LEFT OUTER JOINS

如何强制 Maven 将 Ehcache 2.2.0 与 Hibernate 3.3.2GA 一起使用?

如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

如何配置 Hibernate 5 以强制 Mysql 使用 Innodb 引擎创建表?

如何强制 Hibernate 添加 ID 列以插入查询?

Hibernate强制清除Session缓存 Clear与Flush方法 FlushMode设置