1

我是 Hibernate 的新手。我不明白 Hibernate 的流程。请澄清我的疑惑。

我有带有以下语句的“ HibernateUtil.java ”

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

configure() 依次运行“hibernate.cfg.xml”并返回带有数据库连接属性的“sessionFactory”对象。

我在“UNIV”下创建了一个表“STUDENT”

在“univ”java类包下我有 -

1)Student.hbm.xml(映射到UNIV.STUDENT表)

2)Student.java(带有setter getter方法的类wrt到STUDENT表)

当我在 HQL 查询 0 中查询“来自 univ.Student”时,我得到了 STUDENT 的表内容

但是“from univ.Student”实际上返回了“Student 类的实例”

我在这里有点困惑....

1)Student.hbm.xml 文件何时被调用

2)“HQL”与“Java Class Object”交互,而“SQL”与“Database Table”交互。

在相应的 SQL 命令使用 Student.hbm.xml 映射文件获取表内容后,“from univ.Student”hql 命令是否显示“Student”类实例中的表内容

                                  (or) 

对应的 SQL 命令直接显示表格内容,无需访问“Student”类

4

1 回答 1

1
  1. .hbm.xml 文件由 configure() 加载,它在类路径中扫描具有相应类名的 .hbm.xml 文件。您还可以在主 hibernate.cfg.xml 文件中显式指定其他 .hbm.xml 文件、禁用自动加载以及执行其他一些操作。就个人而言,对于较小的项目,我喜欢将所有实体类的所有映射放在一个顶级 .hbm.xml 文件中,并在 cfg 文件中指定。

  2. 不完全是。HQL首先被翻译成 SQL (基于从 hbm 文件/注释中解析的信息),所以“from univ.Student”最终会变成 SQL“SELECT * FROM STUDENT”,然后Hibernate 遍历结果集并填充学生对象(也基于来自 hbm 文件/注释的信息)。

于 2013-08-08T18:27:32.277 回答