`
wlcome998
  • 浏览: 31520 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于Hibernate解析HQL的一些疑问

    博客分类:
  • J2EE
阅读更多
最近对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>
分享到:
评论
12 楼 caige_215 2007-08-23  
如果不在hbm.xml里mapping,那么对象与表怎么关联
11 楼 javaIE 2007-08-20  
deadcode 写道
表名不是通过HQL中的对象名解析出来的,是在hbm.xml这些mapping文件中定义的.
没有吧
10 楼 deadcode 2007-08-13  
表名不是通过HQL中的对象名解析出来的,是在hbm.xml这些mapping文件中定义的.
9 楼 hqman 2007-08-13  
楼主请问有没有办法 通过hql 解析出对应的表名???
8 楼 malipei 2007-06-18  
没有联系
7 楼 wlcome998 2007-06-15  
Hibernate中的session和用户session即HTTPSession应该没有什么必然的联系把
6 楼 jackhlp 2007-06-13  
wlcome998 写道
呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗

它的源码不就是资料吗?
5 楼 wlcome998 2007-06-13  
呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗
4 楼 LucasLee 2007-06-13  
如果底层还不是JDBC,这个hibernate也太神奇了.
;)
3 楼 wlcome998 2007-06-12  
呵呵 就是想理解下底层的东西 才去看源码的
2 楼 wlcome998 2007-06-12  
那Hibernate具体调用Jdbc的源码在哪个类上呢  还有1点 HQL是面向对象的  而SQL面向表的 但Hibernate的操作都是在建立在对象之上的 
1 楼 dennis_zane 2007-06-12  
底层肯定是jdbc,不然你说用什么呢?

相关推荐

    weblogic12 下 org.hibernate.hql.ast.HqlToken

    ### WebLogic 12下org.hibernate.hql.ast.HqlToken冲突解决方案 在使用WebLogic 12部署应用程序时,可能会遇到与`org.hibernate.hql.ast.HqlToken`相关的异常问题。这种异常通常与Hibernate版本之间的不兼容性有关...

    hibernate-HQL语句大全

    hibernate-HQL语句大全

    Hibernate_HQL.rar_hibernate HQL_hibernate hql src

    对hibernate的hql进行了详尽的讲解

    Hibernate-HQL.rar_HQL_hibernate hql

    本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...

    Hibernate(HQL、QBC查询)源码

    Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码

    Hibernate hql查询语法总结

    《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...

    Hibernate-HQL语句多对多写法

    "Hibernate-HQL语句多对多写法" Hibernate 是一个流行的 Java 持久层框架,它提供了强大的对象关系映射(ORM)功能,使得开发者可以方便地与数据库交互。但是,在使用 Hibernate 时,我们经常会遇到多对多关系的...

    Hibernate 课件_HQL

    ### Hibernate 课件_HQL 知识点解析 #### HQL查询 - **定义**: HQL(Hibernate Query Language)是一种面向对象的查询语言,它的语法类似于SQL,但不同于直接操作数据库表,HQL操作的是持久化的Java对象。这意味着...

    Hibernate查询语言HQL.PPT

    Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...

    hibernate3-hql.jar

    hibernate3-hql.jar .

    hibernate的HQL的jar

    在项目中,我们需要将这些jar添加到类路径(classpath)中,以确保编译和运行时能够正确解析和执行HQL语句。 描述中提到的“对于应用hibernate框架进行开发时需要”,意味着在基于Hibernate开发项目时,HQL是一个...

    Hibernate的HQL查询

    hibernate hql 语法学习的文档

    Hibernate的HQL讲解

    对Hibernate中HQL语句的讲解

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    hibernate 查询?Hibernate的HQL查询

    【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...

    hibernate的HQL的模糊查询

    在Java的持久化框架Hibernate中,HQL(Hibernate Query Language)是专为ORM(对象关系映射)设计的一种SQL方言,用于对数据库进行操作。HQL模糊查询是开发者在进行数据检索时常用的一种功能,它允许我们根据部分...

    hibernate-hql 资料大全

    Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作对象关系映射(ORM)的查询语言。它类似于SQL,但设计目的是针对Java对象,而不是数据库表。HQL允许开发者以面向对象的方式编写查询,...

    weblogic10.3 org.hibernate.hql.ast.HqlToken报错问题

    首先,`org.hibernate.hql.ast.HqlToken`是Hibernate查询语言解析器的一部分,用于处理HQL(Hibernate Query Language)语句。HQL是一种面向对象的查询语言,类似于SQL,但它是针对Java持久化对象的。当出现...

Global site tag (gtag.js) - Google Analytics