当前位置: 首页 > 知识库问答 >
问题:

spring@Query注释中的HQL查询

苏德容
2023-03-14

我一直试图理解HQL和JPQL之间的区别。冬眠留档在这里

建议写入选择是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支持两者吗?

共有1个答案

仲孙文乐
2023-03-14

我认为这取决于你使用哪种JPA实现。

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

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

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

此外,正如上面提到的jdicker,JPQL是HQL的一个子集,或者换句话说,hibernate提供了比JPA更多的功能。。因此,只要使用HibernateSA作为底层JPA引擎,就应该能够解析spring数据中的HQL。

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

 类似资料:
  • 我对Spring中的原生查询有一个问题。我在param value中使用了带有参数nativequery=true注释@query和SQL查询。 而在RezerWacjamanager.java中: 问题是什么时候调用方法RezerWacjadao.getDoStepnosCnatypy(dataOd,dataDo)并执行此查询。我得到一个错误错误: DoStepNosCtypyListdTo.j

  • 关于注释和注释,我遇到了一个有趣的问题在Spring Boot项目上,spring data jpa也在项目中。 基本上,我有软删除机制,这是为实体设置一个有效的日期(例如属性列在实体类中带有属性)。这些实体用注释类似于。这样,将设置为now和before的软删除的实体自动删除。(例如实体类) 我还有一些其他实体没有(例如实体类) 以及其他一些可用的表。如果是Jpa查询带注释的方法。我正面临着一些

  • 当我将此查询添加到我的存储库时,它给出了一个奇怪的错误。请帮助 我在Oracle中测试过这个查询,我很好,为什么它在这里不工作请帮助? 我正在尝试从我的服务类调用此方法,并收到此错误

  • 我有两门课, 我的JSON文档是这样的, 我应该如何使用注释编写查询方法,通过userId和questionID查找PracticeQuestion。 谢谢你的建议。

  • 是否将HQL查询转换为纯Oracle查询? 从表中选择* 谢谢Advane。

  • 我试图在elasticsearch spring数据中使用@query annotation来进行复杂的查询,但当我尝试下面的简单查询时,我得到了一个错误 堆栈跟踪