簡體   English   中英

spring @Query 注釋內的 HQL 查詢

[英]HQL Query inside spring @Query annotation

我一直試圖了解 HQL 和 JPQL 之間的區別。 hibernate 文檔位於此處

建議編寫 select 對於 JPQL 是必要的,但在 HQL 中則不需要。 但是,當我嘗試在 spring 數據 JPA 的查詢注釋中編寫 HQL 或 JPQL 時,HQL 和 JPQL 都有效。

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Long> {
    
    @Query(value = "from com.demo.spring.data.jpa.User u")
    public List<User> findAllUsersHQL();
    
    @Query(value = "select u from com.demo.spring.data.jpa.User u")
    public List<User> findAllUsersJPQL();
}

我的理解是因為查詢注釋是為 JPA 設計的,為什么支持 HQL?

或者讓我換個說法——

我們可以在查詢注釋中編寫 HQL - spring 數據 JPA 是否支持兩者?

我認為這取決於您使用哪種 JPA 實現。

盡管 Spring 數據表明它支持 JPQL,但 Spring 數據本身並沒有實現任何用於使用 JPQL 驗證和實現查詢的功能。

Spring 將依賴於底層的 JPA 實現,它將驗證給定的 JPQL 查詢並將其轉換為普通的 SQL。

如果底層適配器是hibernate 適配器,它很有可能支持 HQL 並且不會將應用程序限制為 JPQL。

Moreover, as jdicker mentioned above, JPQL is a subset of HQL, or in the other words, hibernate provided mucm more functionalty than that of JPA.. so you shoudl be able to parse HQL in spring data as long as you are using Hibernate sa底層 JPA 引擎。

DIY -您可以嘗試在QueryTranslatorImpl中放置斷點並自己確認行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM