首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于Hibernate解析HQL的一些疑义

2012-11-04 
关于Hibernate解析HQL的一些疑问最近对Hibernate理论比较感兴趣,小研究了Hibernate的部分源码,对其中的流

关于Hibernate解析HQL的一些疑问
最近对Hibernate理论比较感兴趣,小研究了Hibernate的部分源码,对其中的流程进行了简单的总结并存在些疑问,希望高手给于帮助或者推荐些相应的学习资料,谢谢!

Hibernate首先是使用了自己的数据库操作语言-HQL
Hibernate解析HQL的编译分析器用的是ANTLR分析器
HQL虽然是一种数据库操作语言,它只是方便编写和使用,本质上还是要转换成SQL语言来在数据库上执行的。
Hibernate在转换时主要用到了ANTLR,ANTLR是JAVA编写的词法分析器和语法分析器,功能很强大。
ANTLR将HQL转化成SQL语句,再实际执行SQL语句。
ANTLR所对应的文件名的格式是*.g的格式,Hibernate的jar包中含有3个语法定义文件。
Hibernate包含了3个语法定义文件:
?1. hql.g定义了词法分析和语法分析,将hql解释成hql的抽象语法树(AST) 。
?2. hql-sql.g将hql AST转化为sql AST,将生成模块与hibernate解耦。
?3. sql -gen.g 从sql AST生成sql 语言。?

详细可以查看Hibernate中的createQuery()的调用过程
通过QueryPlanCache的getHQLQueryPlan()方法获得查询计划HQLQueryPlan的一个实例,而后者主要是调用了 QueryTranslator的compile方法,编译HQL语句。在QueryTranslator的继承类 QueryTranslatorImpl的doCompile观察这个过程:
PHASE 1 : Parse the HQL into an AST.
PHASE 2 : Analyze the HQL AST, and produce an SQL AST.
PHASE 3 : Generate the SQL.

本人的一些疑问在于当HQL被ANTLR通过编译转换成SQL以后,Hibernate的具体执行流程以及于POJO的关联,它将通过哪些类和哪些方法用什么样的方式来执行SQL,总不会还是用的JDBC吧。
<p:colorscheme colors="#0066cc,#ffffff,#003b76,#ccecff,#33cccc,#66ccff,#ffffcc,#ffcc66"> </p:colorscheme> 1 楼 dennis_zane 2007-06-12   底层肯定是jdbc,不然你说用什么呢? 2 楼 wlcome998 2007-06-12   那Hibernate具体调用Jdbc的源码在哪个类上呢  还有1点 HQL是面向对象的  而SQL面向表的 但Hibernate的操作都是在建立在对象之上的  3 楼 wlcome998 2007-06-12   呵呵 就是想理解下底层的东西 才去看源码的 4 楼 LucasLee 2007-06-13   如果底层还不是JDBC,这个hibernate也太神奇了.
;) 5 楼 wlcome998 2007-06-13   呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗 6 楼 jackhlp 2007-06-13   wlcome998 写道呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗
它的源码不就是资料吗? 7 楼 wlcome998 2007-06-15   Hibernate中的session和用户session即HTTPSession应该没有什么必然的联系把 8 楼 malipei 2007-06-18   没有联系 9 楼 hqman 2007-08-13   楼主请问有没有办法 通过hql 解析出对应的表名??? 10 楼 deadcode 2007-08-13   表名不是通过HQL中的对象名解析出来的,是在hbm.xml这些mapping文件中定义的. 11 楼 javaIE 2007-08-20   deadcode 写道表名不是通过HQL中的对象名解析出来的,是在hbm.xml这些mapping文件中定义的.没有吧 12 楼 caige_215 2007-08-23   如果不在hbm.xml里mapping,那么对象与表怎么关联

热点排行