gpt4 book ai didi

java - spring @Query 注释中的 HQL 查询

转载 作者:行者123 更新时间:2023-12-04 09:17:15 25 4
gpt4 key购买 nike

我一直在努力理解 HQL 和 JPQL 之间的区别。 here 处的 hibernate 文档

建议JPQL需要写select,HQL不需要。但是当我尝试在 spring data 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();
}

我的理解是,既然 Query 注释是为 JPA 而设计的,为什么支持 HQL?

或者让我换句话说-

我们可以在查询注释中编写 HQL - spring data JPA 是否支持两者?

最佳答案

我认为这取决于您使用的 JPA 实现。

尽管 Spring 数据表示它支持 JPQL,但 Spring 数据本身并没有实现任何使用 JPQL 验证和实现查询的功能。

Spring 将依赖于底层 JPA 实现,该实现将验证给定的 JPQL 查询并将其转换为纯 SQL。

如果底层适配器是 hibernate Adapter , 它很有可能会支持 HQL 而不会将应用程序限制为 JPQL。

另外,上面jdicker提到,JPQL是HQL的一个子集,或者说,hibernate提供的mucm功能比JPA多。使用 Hibernate sa 作为底层 JPA 引擎。

DIY - 您可以尝试在 QueryTranslatorImpl 中放置一个断点并自己确认行为。

关于java - spring @Query 注释中的 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63165994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com