Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何掩饰”;使用索引“;在h2上运行的MySQL查询中_Java_Mysql_H2 - Fatal编程技术网

Java “如何掩饰”;使用索引“;在h2上运行的MySQL查询中

Java “如何掩饰”;使用索引“;在h2上运行的MySQL查询中,java,mysql,h2,Java,Mysql,H2,我正在为一个java应用程序测试一个使用本地h2的MySQL查询。问题是h2不支持MySQL查询中的“使用索引”(索引提示)。它报告“SQL语句中的语法错误”。是否有办法在h2中隐藏USE索引的情况下运行此查询 我尝试使用别名将使用索引部分替换为空字符串: CREATE ALIAS `USE INDEX` FOR "<java-function-that-returns-empty-string>" 为“”创建别名“使用索引” 但它不起作用,即仍然报告“SQL语句中的语法错误”。

我正在为一个java应用程序测试一个使用本地h2的MySQL查询。问题是h2不支持MySQL查询中的“使用索引”(索引提示)。它报告“SQL语句中的语法错误”。是否有办法在h2中隐藏USE索引的情况下运行此查询

我尝试使用别名将使用索引部分替换为空字符串:

CREATE ALIAS `USE INDEX` FOR "<java-function-that-returns-empty-string>"
为“”创建别名“使用索引”

但它不起作用,即仍然报告“SQL语句中的语法错误”。我怀疑这是因为“使用索引”是两个单词,alias不支持?但我不确定。有什么建议吗?谢谢。

H2目前不支持非标准的MySQL“使用索引”语法。因此,您的SQL对H2无效


但是,我目前正在将其添加到H2中。

我遇到了同样的问题,最后,我找到了一个简单而优雅的解决方案:

select 
count(*)  from category t /*! use index(primary) */

这种注释只由MySQL解释,而不是由H2解释。就这样。

为什么要在H2中使用为MySQL编写的查询?我们的生产环境。在mysql中,但是单元测试使用h2。我无法控制用于单元测试的数据库引擎,也无法控制生产环境。顺便说一句,我们在单元测试中使用“migrations.sql”来设置h2。这就是我尝试“创建别名”的地方。ORM工具通常解决此问题的方法是为每个目标数据库使用不同的方言。谢谢@ElliottFrisch。不过,我们的代码库没有使用ORM。最后,我决定对数据访问接口进行子类化,并用删除的“USE INDEX”覆盖查询。子类仅用于单元测试。现在它似乎正在工作。感谢您在h2上的工作。请不要忘记强制索引以及使用索引。=)就我个人而言,我所需要的就是语法被认为是合法的,这样我的测试套件就可以通过了。太棒了!是否打开拉取请求?我们可以看一下吗?看起来他忘记了,关于强制索引,它不起作用(糟糕的SQL语法),当您想使用H2自动测试为MySQL编写的代码时,这有点问题:(