java - 查询异常 : JPA-style positional param was not an integral ordinal

标签 java sql hibernate spring-boot

我收到“QueryException:JPA 样式位置参数不是整数序数” 我尝试用其他人解决的方式来解决,例如 org.hibernate.QueryException: JPA-style positional param was not an integral ordinal但还是不行。

我尝试将更改形式 ?1 硬编码为数据库中已有的某些数据,它可以工作,但更改为 ?1 后,它再次出现错误。

--- 硬编码之前(有错误) -- 在存储库中 --

@Query(
    value = "SELECT user_att_workshop.id, user_att_workshop.user_id, user_att_workshop.workshop_att_id, skill.skill_name, user_att_workshop.skill_score " + 
            "FROM user_att_workshop LEFT JOIN skill on user_att_workshop.skill_id = skill.id " + 
            "WHERE user_att_workshop.user_id = ?1 " + 
            "AND user_att_workshop.workshop_att_id = ?2;", 
            nativeQuery = true
)
public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopId(int userId, int workshopId);

-- 服务中 --

public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopIdtest(
    int userId, 
    int workshopId) {

    return 
        userScoreByWorkshopAttRepository.findUserScoreByUserIdAndWorkshopId(
        userId,
        workshopId
    );
}

-- 在 Controller 中 --

List<UserScoreByWorkshopAtt> getUserScooreByUserId(
    @PathVariable("user_id") int userId, 
    @PathVariable("workshop_id") int workshopId) {

    return userScoreByWorkshopAttService.findUserScoreByUserIdAndWorkshopIdtest(
        userId, 
        workshopId
    );

}

--- 硬编码后(可以运行并且没有错误) -- 在存储库中 --

 @Query(value = "SELECT user_att_workshop.id, user_att_workshop.user_id, user_att_workshop.workshop_att_id, skill.skill_name, user_att_workshop.skill_score FROM user_att_workshop LEFT JOIN skill on user_att_workshop.skill_id = skill.id  WHERE user_att_workshop.user_id = 5 AND user_att_workshop.workshop_att_id = 2;", nativeQuery = true)
public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopId();

-- 服务中 --

public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopIdtest() {
    return userScoreByWorkshopAttRepository.findUserScoreByUserIdAndWorkshopId();
}

-- 在 Controller 中 --

List<UserScoreByWorkshopAtt> getUserScooreByUserId(@PathVariable("user_id") int userId,
            @PathVariable("workshop_id") int workshopId) {
        return userScoreByWorkshopAttService.findUserScoreByUserIdAndWorkshopIdtest();
    }

Caused by: org.hibernate.QueryException: JPA-style positional param was not an integral ordinal at org.hibernate.engine.query.spi.ParameterParser.parse(ParameterParser.java:195) at org.hibernate.engine.query.spi.ParamLocationRecognizer.parseLocations(ParamLocationRecognizer.java:56) at org.hibernate.engine.query.internal.NativeQueryInterpreterStandardImpl.getParameterMetadata(NativeQueryInterpreterStandardImpl.java:30) at org.hibernate.engine.query.spi.QueryPlanCache.getSQLParameterMetadata(QueryPlanCache.java:128) at org.hibernate.internal.AbstractSharedSessionContract.getNativeQueryImplementor(AbstractSharedSessionContract.java:1000) ... 85 more

最佳答案

你可以这样写吗:

@Query(
    value = "SELECT user_att_workshop.id, user_att_workshop.user_id, user_att_workshop.workshop_att_id, skill.skill_name, user_att_workshop.skill_score " + 
            "FROM user_att_workshop LEFT JOIN skill on user_att_workshop.skill_id = skill.id " + 
            "WHERE user_att_workshop.user_id = :userId " + 
            "AND user_att_workshop.workshop_att_id = :workshopId;", 
            nativeQuery = true
)
public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopId(@Param("userId")int userId,@Param("workshopId") int workshopId);

或者从查询末尾删除 ';' 并检查是否有空格

@Query(
    value = "SELECT user_att_workshop.id, user_att_workshop.user_id, user_att_workshop.workshop_att_id, skill.skill_name, user_att_workshop.skill_score " + 
            "FROM user_att_workshop LEFT JOIN skill on user_att_workshop.skill_id = skill.id " + 
            "WHERE user_att_workshop.user_id =?1 " + 
            "AND user_att_workshop.workshop_att_id =?2", 
            nativeQuery = true
)
public List<UserScoreByWorkshopAtt> findUserScoreByUserIdAndWorkshopId(int userId, int workshopId);

关于java - 查询异常 : JPA-style positional param was not an integral ordinal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310935/

相关文章:

hibernate - 在 jboss 独立运行时,事务无法进行 STATUS_MARKED_ROLLBACK

子类中的 Java 静态构造函数访问

sql - 在 pgadmin iii 中导入 .sql 文件

java - Hibernate hql/criteria 结果包含集合

java - 如何使用Hibernate创建实体来创建具有两个外键列的表: No identifier specified for entity:

mysql - 通过将以下查询合并为一个来加速它们

java - 如何在反射的私有(private)方法上模拟自动连线的私有(private)响应

java - 如何检查未知数量的输入 java 并在行尾停止检查

java - 如何在 mybatis XML 映射器中使用 partials 或 helpers?

mysql - 调整 SQL 查询