QueryException: позиционный параметр в стиле JPA не был интегральным порядковым - PullRequest
0 голосов
/ 26 мая 2019

Я получил «QueryException: позиционный параметр в стиле JPA не был целочисленным ординалом», который я пытаюсь решить путем решения других, например org.hibernate.QueryException: позиционный параметр в стиле JPA не был интегральным ординалом но все равно не работает.

Я пытаюсь жестко закодировать форму изменения? 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
    );
}

- В контроллере -

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

- В контроллере -

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.Mache.PlayerClayerClayerClayerClayerClayerClayerClayer.hibernate.internal.AbstractSharedSessionContract.getNativeQueryImplementor (AbstractSharedSessionContract.java:1000) ... еще 85

1 Ответ

1 голос
/ 26 мая 2019

Можете ли вы написать это следующим образом:

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