2

我正在使用休眠 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

4

2 回答 2

1

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

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

于 2020-09-25T22:58:56.300 回答
0

用于StatementInspector更改生成的 SELECT 语句。关于如何使用它,请参阅相关问题

于 2021-08-02T04:22:30.087 回答