【发布时间】:2014-02-20 11:34:17
【问题描述】:
在我的项目中,我即将使用 Hibernate,但造成混淆的是:
我在某处读到的:
Hibernate 有自己的查询语言,即独立于数据库的 Hibernate 查询语言 因此,如果我们更改数据库,那么我们的应用程序也将工作,因为 HQL 是独立于数据库的 HQL 包含独立于数据库的命令
是不是说我们在java中使用Hibernate的时候不用写存储过程和视图?
【问题讨论】:
在我的项目中,我即将使用 Hibernate,但造成混淆的是:
我在某处读到的:
Hibernate 有自己的查询语言,即独立于数据库的 Hibernate 查询语言 因此,如果我们更改数据库,那么我们的应用程序也将工作,因为 HQL 是独立于数据库的 HQL 包含独立于数据库的命令
是不是说我们在java中使用Hibernate的时候不用写存储过程和视图?
【问题讨论】:
简答:您不必编写任何查询和/或存储过程。 (您也可以在应用程序启动期间休眠告诉您创建/更新所有必需的表。)
长答案:无需手动定义查询即可使用 Hibernate。 (使用 EntityManager,您可以简单地告诉 hibernate 从数据库中获取 user.class 的所有内容。)但是它也支持 HQL 以及 SQL 查询。
当您稍后切换到另一个数据库时,SQL 查询当然会停止工作。 HQL 将适用于每个数据库,因为 hibernate 能够将 HQL 查询转换为任何(受支持的)数据库语言。
但请注意:在我看来如果您让 hibernate 完成所有工作,那么 Hibernate 会非常慢。 (当加载具有复杂关系的实体时,Hibernate 会触发大量单个选择查询)
【讨论】: