在Hibernate的HQL中使用“SQL_NO_CACHE”语句

时间:2013-11-01 10:49:49

标签: mysql hibernate hql

我正在使用hibernate 4.x并希望在HQL查询中设置MySQL的“SQL_NO_CACHE”语句

@Query("FROM mytable t WHERE id=1");

目前正在制作

select * from mytable where id=1

但我想要

select SQL_NO_CACHE * from mytable where id=1

但我无法弄清楚如何。

使用本机查询没问题,但是所有查询都是用HQL编写的,并且比这个例子复杂得多。所以我得到一个QuerySyntaxException: unexpected token异常,因为这个语句在hibernate文档中都没有记录。

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch16.html

2 个答案:

答案 0 :(得分:0)

可以创建一个具有此子句SQL_NO_CACHE的视图。然后,当休眠运行SQL查询时,您可以覆盖PhysicalNamingStrategyStandardImpl.toPhysicalTableName并更改为获取视图名称而不是表名称。例如,默认名称为“ mytable”,视图名称为“ vw_mytable”,然后在命名表之前将“ vw_”连接起来。

将此实现从PhysicalNamingStrategyStandardImpl放入属性“ hibernate.physical_naming_strategy”的持久性文件中,您的查询将使用子句SQL_NO_CACHE。

答案 1 :(得分:0)

使用 StatementInspector 更改生成的 SELECT 语句。有关如何使用它,请参阅 related question