QueryException:JPA样式的位置参数不是整数序号 [英] QueryException: JPA-style positional param was not an integral ordinal

查看:75
本文介绍了QueryException:JPA样式的位置参数不是整数序号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到"QueryException:JPA样式的位置参数不是整数序号"我尝试通过其他方式来解决,例如

I got "QueryException: JPA-style positional param was not an integral ordinal" I try to solve by the way others solve such as org.hibernate.QueryException: JPA-style positional param was not an integral ordinal but it still doesn't work.

我尝试将形式?1硬编码为数据库中已有的一些数据,并且可以工作,但是更改为'1后,它再次给出错误.

I try to hardcode change form ?1 to some data that already have in the database and it works but after change to ?1 it gives an error again.

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

--- Before Hardcode (have Error) -- In Repository --

@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
    );
}

-在控制器中-

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

    return userScoreByWorkshopAttService.findUserScoreByUserIdAndWorkshopIdtest(
        userId, 
        workshopId
    );

}

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

--- After Hardcode (can run and have no error) -- In Repository --

 @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();
}

-在控制器中-

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

由以下原因引起:org.hibernate.QueryException:JPA样式的位置参数在...上不是必不可少的序数org.hibernate.engine.query.spi.ParameterParser.parse(ParameterParser.java:195)在org.hibernate.engine.query.spi.ParamLocationRecognizer.parseLocations(ParamLocationRecognizer.java:56)在org.hibernate.engine.query.internal.NativeQueryInterpreterStandardImpl.getParameterMetadata(NativeQueryInterpreterStandardImpl.java:30)在org.hibernate.engine.query.spi.QueryPlanCache.getSQLParameterMetadata(QueryPlanCache.java:128)在org.hibernate.internal.AbstractSharedSessionContract.getNativeQueryImplementor(AbstractSharedSessionContract.java:1000)...还有85个

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);

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

OR remove the ';' from end of the query and check for any whitespace

@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);

这篇关于QueryException:JPA样式的位置参数不是整数序号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆