这两天在研究复杂查询的实现,想把普通sql的写法,转成criteria的写法。没想出一个好的方法,特抛砖一块,呵呵。
((name='test1' or name='test2') and (age>20 and age<30)) and sex='1'
这个对应的结果是这样的
Ex.and(Ex.and(Ex.or(name='test1',name='test2'),Ex.and(age>20,age<30)),sex='1')
怎么能使用程序自动解析并得到结果呢?
初步想法是,通过编译原理的方式进行解析,组装成一棵树,然后对树进行遍历。
问题补充:
这两天在研究复杂查询的实现,想把普通sql的写法,转成criteria的写法。没想出一个好的方法,特抛砖一块,呵呵。
((name='test1' or name='test2') and (age>20 and age<30)) and sex='1'
这个对应的结果是这样的
Ex.and(Ex.and(Ex.or(name='test1',name='test2'),Ex.and(age>20,age<30)),sex='1')
怎么能使用程序自动解析并得到结果呢?
初步想法是,通过编译原理的方式进行解析,组装成一棵树,然后对树进行遍历。
直接使用了hibernate中的HqlParser,得到AST。问题解决。整个复杂查询终于实现,当然中间采用了不少的约定。
另:对参与运算的value需要做类型转换,感觉实在无奈!
感谢sdh5724和cats_tiger的回答。
编译原理的应用
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置