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

Spring boot JPA中的自定义查询问题

江敏学
2023-03-14

我试图按范围计算记录数,但在运行服务时出错:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '<' near line 1, column 58 [SELECT new net.BBB.ProjectB.entity.AgeCount(COUNT(s.edad < 15 OR NULL), COUNT(s.edad < 25 AND s.edad > 16 OR NULL), COUNT(s.edad < 35 AND s.edad > 26 OR NULL), COUNT(s.edad < 45 AND s.edad > 36 OR NULL), COUNT(s.edad > 46 OR NULL),FROM net.BBB.ProjectB.entity.Student AS s) ]
package net.BBB.ProjectB.repository;

import java.util.List;

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

import net.BBB.ProjectB.entity.AgeCount;
import net.BBB.ProjectB.entity.NacionalityCount;
import net.BBB.ProjectB.entity.Student;

@Repository
public interface StudentRepository extends CrudRepository<Student, Long> {

    List<Student> findByNombre(String nombre);

    @Query(value = "SELECT new net.BBB.ProjectB.entity.NacionalityCount(COUNT(s.nacionalidad), s.nacionalidad) "
            + "FROM Student AS s GROUP BY s.nacionalidad")
    List<NacionalityCount> countByNacionalidad();

    @Query(value = "SELECT new net.BBB.ProjectB.entity.AgeCount(COUNT(s.edad < 15 OR NULL), "
            + "COUNT(s.edad < 25 AND s.edad > 16 OR NULL), COUNT(s.edad < 35 AND s.edad > 26 OR NULL), "
            + "COUNT(s.edad < 45 AND s.edad > 36 OR NULL), COUNT(s.edad > 46 OR NULL),"
            + "FROM Student AS s) ")
    List<AgeCount> countByAge();

}

第一个查询很好,第二个是问题。以防万一,该实体的名称是Student,它有一个名为“edad”的属性,我试图通过范围来计算它。我已经尝试过在数据库上工作的其他查询,例如:

SELECT COUNT(s.edad BETWEEN 0 AND 16 OR NULL), 
        COUNT(s.edad BETWEEN 17 AND 25 OR NULL), 
        COUNT(s.edad BETWEEN 26 AND 35 OR NULL),
        COUNT(s.edad BETWEEN 35 AND 45 OR NULL)
FROM students AS s;

很明显是用实体的名字。我不知道是否有办法让它起作用。

共有1个答案

石喜
2023-03-14

不完全确定,但在您的HQL查询中,您在末尾有一个“,”加上一个“)”,应该在其他地方?

  + "COUNT(s.edad < 45 AND s.edad > 36 OR NULL), COUNT(s.edad > 46 OR NULL),"
            + "FROM Student AS s) ")

通常,我会尝试一步一步地修复这个查询。即。用一个静态数字替换所有计数,然后用实际表达式替换1个计数,一旦成功,替换下一个等等。

 类似资料:
  • 问题内容: 我试图在扩展CrudRepository的存储库中执行一些SQL查询。我在控制器中有以下代码: DAO代码如下: 该类是: 投影为: 我对如何添加查询(诸如此类)感到困惑: 我如何更改投影,还有哪些其他必要的更改? 问题答案: 您可以将DAO更改为下面,这应该可以工作。 } 确保Bean类构造函数应具有传递的参数。 验证查询是否为有效的JPA查询(此处)。

  • 1. 简介 分析云作为企业进行全域用户行为数据分析的数据中台,需要满足企业不同业务角色的各类差异化分析需求。 其中,对于企业深度结合业务模式的定制化需求,分析云平台提供了“自定义SQL查询”的功能,支持业务人员自行编辑复杂的 SQL 查询语言,实现对平台数据仓库中最底层的细粒度用户行为数据进行分析操作,以获取当前分析云平台既有数据模型无法覆盖的个性化分析需求的结果。 2. 使用说明 当前 sql

  • 我正在应用程序中使用Hazelcast作为共享映射。我的地图是这样的: 第144行: 这里是我的类: 很酷,在重新编译Hazelcast之后,使用这个新的jar,我可以使用普通SQL访问查询。但对于pagingQueries,我有一些错误。

  • 我需要一些帮助。我试图创建一个自定义查询我在Wordpress中创建的自定义帖子,并使用Elementor Pro。 在我的帖子中,我添加了一个带有数字值的自定义字段“排序”,我想用它来手动排序帖子。 然而,我似乎无法让它发挥作用。 我正在使用最新的Elementor pro版本。 我试着按照他们页面上的说明:https://developers.elementor.com/custom-quer

  • 1. 简介 分析云作为企业进行全域用户行为数据分析的数据中台,需要满足企业不同业务角色的各类差异化分析需求。 其中,对于企业深度结合业务模式的定制化需求,分析云平台提供了“自定义SQL查询”的功能,支持业务人员自行编辑复杂的 SQL 查询语言,实现对平台数据仓库中最底层的细粒度用户行为数据进行分析操作,以获取当前分析云平台既有数据模型无法覆盖的个性化分析需求的结果。 2. 使用说明 当前 sql

  • 我有一个自定义的文章类型(媒体文章),它使用一些自定义字段,有一个自定义分类法(媒体文章类别)和该分类法中的14个术语。我可以使用CPT归档模板输出所有自定义帖子。 我在侧边栏中还有一个菜单,它列出了用于过滤自定义帖子的术语(我使用了一个自定义WP菜单小部件来创建列表)。 我用一个查询设置了一个自定义分类模板。根据args中放置的分类术语,我能够成功地组合或单独显示帖子。因此,如果我不需要使用过滤