Hibernate 命名查询

2024 年 8 月 29 日 | 阅读 3 分钟

Hibernate 命名查询是通过有意义的名称来使用查询的方式。这类似于使用别名。Hibernate 框架提供了命名查询的概念,这样应用程序员就不需要将查询分散到所有 Java 代码中。

有两种方法可以在 Hibernate 中定义命名查询:

  • 通过注解
  • 通过映射文件。

Hibernate 通过注解实现命名查询

如果想在 Hibernate 中使用命名查询,你需要了解 @NamedQueries 和 @NamedQuery 注解。

@NameQueries 注解用于定义多个命名查询。

@NameQuery 注解用于定义单个命名查询。

让我们看一个使用命名查询的例子


Hibernate 通过注解实现命名查询的示例

在这个例子中,我们使用注解在持久化类中定义命名查询。只有三个文件:

  • Employee.java
  • hibernate.cfg.xml
  • FetchDemo

在这个例子中,我们假设数据库中有一个名为 em 的表,包含 4 列:id、name、job 和 salary,并且该表中存在一些记录。

Employee.java

这是一个持久化类,它使用注解来定义命名查询并将该类标记为实体。


hibernate.cfg.xml

这是一个配置文件,用于存储有关数据库的信息,例如驱动类、url、用户名、密码和映射类等。


FetchData.java

这是一个 Java 类,它使用命名查询并根据查询打印信息。getNamedQuery 方法使用命名查询并返回 Query 的实例。

Hibernate 通过映射文件实现命名查询

如果想通过映射文件定义命名查询,你需要使用 hibernate-mapping 的 query 元素来定义命名查询。

在这种情况下,你需要创建一个 hbm 文件来定义命名查询。其他资源与上述示例中给出的相同,除了持久化类 Employee.java,你不需要使用任何注解,以及 hibernate.cfg.xml 文件,你需要指定 hbm 文件的映射资源。

hbm 文件应如下所示:

emp.hbm.xml


持久化类应如下所示:

Employee.java


现在将映射资源包含在 hbm 文件中,如下所示:

hibernate.cfg.xml