java - 这个简单的 JPQL 查询究竟是如何工作的?

标签 java hibernate jpql rdbms

我是 Hibernate 的新手,我有以下疑问。我有这个实体类,并在我的类上声明了 2 个 JPQL 命名查询:

@NamedQueries({
        @NamedQuery(name = "kmProjectInfoStatusList", query = "select status from KM_ProjectInfoStatus status order by status.idProjectInfoStatus") ,
        @NamedQuery(name = "kmProjectInfoStatusById", query = "SELECT status  FROM KM_ProjectInfoStatus status  where lower(status.idProjectInfoStatus) = :statusId")
})

@Entity
@Table(name = "KM_PROJECT_INFO_STATUS")
public class KM_ProjectInfoStatus implements Serializable {

    @Id
    @GeneratedValue
    private Long idProjectInfoStatus;

    @Column(name = "foldertech")
    private Long foldertech;

    @Column(name = "folderproject")
    private Long folderproject;

    public Long getIdProjectInfoStatus() {
        return idProjectInfoStatus;
    }

    public void setIdProjectInfoStatus(Long idProjectInfoStatus) {
        this.idProjectInfoStatus = idProjectInfoStatus;
    }

    public Long getFoldertech() {
        return foldertech;
    }

    public void setFoldertech(Long foldertech) {
        this.foldertech = foldertech;
    }

    public Long getFolderproject() {
        return folderproject;
    }

    public void setFolderproject(Long folderproject) {
        this.folderproject = folderproject;
    }
}

因此,我的实体类名为 KM_ProjectInfoStatus 并映射 KM_PROJECT_INFO_STATUS 数据库表。

我的疑问主要与JPQL命名查询的工作原理有关(我认为这是JPQL,对吗?),考虑第一个查询

@NamedQuery(name = "kmProjectInfoStatusList", query = "select status from KM_ProjectInfoStatus status order by status.idProjectInfoStatus")

具体是如何工作的?我认为所选的状态代表我的KM_PROJECT_INFO_STATUS数据库表的一行(因此它代表映射它的KM_ProjectInfoStatus实体的特定实例)

如果它是正确的,这意味着与标准 SQL 不同,在 JPQL 中我不是选择表字段的子集,而是选择映射整个表行的实体?

Tnx

最佳答案

在JPQL中,我们使用类和变量来生成查询,而不是表名和列名。您将从 Google 获得有关此内容的详细信息。

select status from KM_ProjectInfoStatus status order by status.idProjectInfoStatus

在上面的 JPQL 查询中,它正在检索所有状态对象,这些对象是 KM_ProjectInfoStatus 类的对象,内部映射到表 KM_PROJECT_INFO_STATUS。

因此您的 Hibernate 驱动程序会将这个 JPQL 查询转换为 sql 查询。您可以通过一些设置在控制台中打印这些 sql 查询来验证实际的 sql 查询。

关于java - 这个简单的 JPQL 查询究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702308/

相关文章:

java - Hibernate 加载延迟列表的延迟初始化异常

java - (Spring MVC + Hibernate 4 + 测试 4) Autowiring DAO 返回 NULL

Java JPQL : add an int value to the already existing one in Database

java - 如何在 Matlab 中自定义 JIDE 网格

java - 儒略日期到常规日期的转换

java - 如何获取不同时区的日期和时间?

java - 创建了多少个对象

java - Spring Boot - “Error creating bean with name 'entityManagerFactory'” - 启动

java - 在 Hibernate 中获得独特的结果

hibernate - JPA日期算术?