JPA中Predicates的表达式解析器

时间:2012-11-23 16:55:06

标签: java hibernate parsing jpa boolean-expression

在基于命令行的应用程序中,我想为过滤数据库结果提供基本支持。为此,我需要解析用户输入。我想支持这些令牌:

  • 布尔(逻辑)运算符,包括andornot和括号
  • 变量,字符串,日期和数字
  • 比较运营商:=!=<>>=<=

因此输入字符串可能如下所示:

(年龄> 3或姓名!='tom')和city ='london'和((生日= 01.01.2010或生日&gt; = 01.01.2013))

基本的东西。

问题:我在哪里获得(tokenizer和)解析器?

  • 是否有支持这些基础知识的图书馆?
  • 如果没有,我知道有一些工具可以为Tokenizers和Parsers生成Java类。你有什么建议吗?

然后,我会将结果转换为Predicate的JPA CriteriaQuery s。首先我想,我可以在命令行中提供JPQL,并让用户指定基于SQL的限制。但我不想让用户写下可能会停止工作的条件。 G。当数据库架构发生变化时。

1 个答案:

答案 0 :(得分:1)

您要搜索一些标记器和解析器。

ANTLR是一个词法分析器/解析器生成器,并且庞大的语法存储库还包含SQL-甚至包含https://github.com/antlr/grammars-v4/tree/master/sql上一些常见数据库的方言。

因此,如果仍然存在该问题,则可以免费生成解析器,只需关心将抽象语法树转换为JPA标准调用即可。