0

这是我在 StackOverflow 中的第一个问题,正如建议的那样,我查看了其他类似的问题,并尝试将他们的回答用于我的问题。到目前为止,没有运气。

情况如下:

我在 JPA 中有一个自定义查询。

@Query(value="SELECT u.str_id,u.str_exercise_name, u.str_target_body_part,u.char_effect FROM training_schema.exercise_entity u WHERE u.str_exercise_name = ?1 and u.str_target_body_part= ?2", nativeQuery=true)
ExerciseEntity findExerciseEntityByNameAndTargetBodyPart(String str_exercise_name,String str_target_body_part);

如果我删除列的名称(u.str_id、u.str_exercise_name、u.str_target_body_part、u.char_effect)并将查询替换为:

    @Query(value="SELECT u FROM training_schema.exercise_entity u WHERE u.str_exercise_name = ?1 and u.str_target_body_part= ?2", nativeQuery=true)
ExerciseEntity findExerciseEntityByNameAndTargetBodyPart(String str_exercise_name,String str_target_body_part);

我收到以下错误:

"The column name str_id was not found in this ResultSet"

当我提到所有列时并没有出现错误并且在我使用别名'u'时生成错误这一事实没有意义,因为这意味着如果我不得不使用一个更大的表,比如 10列,我将不得不把它们都写出来。

还有一条希望有所帮助的信息:对于我使用“u”而不是列名的查询版本,只有在找到匹配记录时才会生成错误。对于从数据库返回空值,没有问题。

使用 Java Spring 和 PostgresSQL。

4

1 回答 1

0

我能够找出问题所在。

在我使用别名 'u' ALONE 的查询中,我不得不稍作改动。我不只是说“你”,而是将其更改为:

 @Query(value="SELECT u.* FROM training_schema.exercise_entity u WHERE u.str_exercise_name = ?1 and u.str_target_body_part= ?2", nativeQuery=true)

练习实体 findExerciseEntityByNameAndTargetBodyPart(String str_exercise_name,String str_target_body_part);

仅使用 'u' 会返回一个没有任何标题的记录集。添加“*”会导致查询返回带有列名的结果集,从而使错误消失。

于 2021-03-10T14:16:02.923 回答