强制 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 调用中使用它