Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate java程序是否没有sql代码?_Java_Sql_Hibernate - Fatal编程技术网

hibernate java程序是否没有sql代码?

hibernate java程序是否没有sql代码?,java,sql,hibernate,Java,Sql,Hibernate,我没有和hibernate一起工作过。我对java有一点经验。我正在浏览Oracle(零售价格管理)创建的java应用程序beast的源代码。由于应用程序大量使用数据库,所以我希望在其中嵌入大量sql代码。但令我惊讶的是,没有嵌入式SQL代码!目前为止我从大量.hbm.xml文件中发现它使用了所谓的“Hibernate”。它是使用hibernate的java程序的商标,还是我还没有看到完整的代码库?。有人能告诉我这是怎么可能的吗?。谢谢。因为这就是使用Hibernate或任何其他对象关系映射框架

我没有和hibernate一起工作过。我对java有一点经验。我正在浏览Oracle(零售价格管理)创建的java应用程序beast的源代码。由于应用程序大量使用数据库,所以我希望在其中嵌入大量sql代码。但令我惊讶的是,没有嵌入式SQL代码!目前为止我从大量
.hbm.xml
文件中发现它使用了所谓的“Hibernate”。它是使用hibernate的java程序的商标,还是我还没有看到完整的代码库?。有人能告诉我这是怎么可能的吗?。谢谢。

因为这就是使用Hibernate或任何其他对象关系映射框架的全部目的


Hibernate为其所有标准数据库操作生成SQL。它理解不同的SQL方言,映射文件(.hbm.xml)告诉它数据库结构,因此它知道如何构造查询。如果希望看到它在运行时输出生成的SQL,可以打开showSql设置。

是一种对象关系映射器(ORM)。ORM用于从程序中隐藏数据库之间SQL不兼容的丑陋细节[sic]——定义表并将它们映射到对象层次结构(
.hbm.xml
文件),然后Hibernate完成其余工作。因此,大多数使用Hibernate的程序不会看到一个SQL语句,除非有特定的理由执行复杂的查询。

Hibernate作为所有ORM工具,确实减少或消除了在Java代码中使用原始SQL的需要,原因如下:

  • Hibernate映射中记录了各种实体之间的许多关联,因此Hibernate会自动获取这些关联-即,如果Java端的两个类之间存在聚合关系Shiop,则每当加载类a的实例时,这可能会映射为DB和Hibernate中的外键关系,也可以自动加载B类的关联实例
  • 许多查询可以使用Hibernate自己的HQL查询语言或使用其CriteriaAPI来完成
在后台,Hibernate确实生成SQL来与DB通信,但这在Java端是不可见的。但是,如果启用了它,则可以在日志中看到它


因此,使用Hibernate的程序很少需要直接使用JDBC或SQL。异常通常与Hibernate无法完全处理的“棘手”遗留DB模式有关。

Hibernate是一种工具或技术,为您处理数据库和应用程序之间的交互。您必须告诉它应用程序和数据库的结构,这就是.hbm.xml文件中的内容

SQL是由Hibernate在运行时生成的(某种程度上)

假设您有一个
Fruit
类,该类的对象将持久化到
T_Fruit
表中

您可以通过
.hbm.xml
文件对hibernate说这句话。有一个表
T_FRUIT
,该表由FRUIT类表示,FRUIT类中的哪些字段对应于th
T_FRUIT
表中的哪些列

然后它知道,无论何时您试图保存一个水果,它都应该插入/更新到
T_fruit
表中

当您想要创建一个苹果时,您可以创建一个与苹果对应的水果对象,并保存“保存此水果”。 Hibernate负责保持它

您可以在表之间定义关系,Hibernate足够智能,可以在多个表中持久化

获取水果时,hibernate还会获取水果及其子级的详细信息(来自引用表的数据)。你可以说你是否想把所有的孩子都带来 立即,或在需要时

等等。目标是使您的生活更轻松,代码可维护,易于阅读,可移植

有了这些信息,让我来