我必须编写基于 HQL 的引擎,动态修补 HQL 查询,动态添加连接和位置(为了防止出现问题——我必须使用 HQL,而不是标准 API)。
例如注入到 HQL 之类的from Object a
东西from Object a JOIN a.path b WHERE b.id='XYZ'
我看到了几个选项,但都不适合我:
Java
String.insert()
方法。查找 WHERE 语句的位置并在语句之前和之后添加其他部分。对于这样的 HQL 来说,这不是一件容易的事SELECT a, (SELECT b FROM Object2 b WHERE b.path=a) FROM Object a WHERE EXISTS(SELECT 1 FROM ... WHERE)
待定算法:我可以计算每个 WHERE 之前的括号 () 数量,如果它为零 - 我找到了正确的 WHERE 位置。有人可以在我的 Java 上向我提出一个更简单的算法或简单的实现吗?
2.我怀疑我的任务可以通过正则表达式来解决,但不能写出正确的正则表达式String.replace()
3.我看到了基于 AST/ANTLR 的语法并且可以解析我的 HQL,但看不到它如何帮助我(即我有声明,但没有正确声明的位置WHERE
)。
4. 独立库用于 SQL 解析,但不用于 HQL。
无论如何,感谢您的任何想法:)