Hibernate无法执行从终端执行良好的查询

时间:2019-10-28 18:02:02

标签: sql hibernate spring-boot jpa

我有一个spring boot项目(在Linux上)和一个由两个实体组成的简单数据库-俗语和标签。说话可以有多个标签,每个标签都可以用来标记多个谚语,因此关系是多对多的。表saying_tags用于使用其ID连接俗语和标签。

当我尝试使用此查询选择所有具有完全指定标签的谚语,并且该查询选择了某些内容(结果不为空)时,hibernate抛出异常,提示Caused by: java.sql.SQLException: Column 'id' not found.,但列id却没有甚至存在于此查询中。当我尝试从终端或DBeaver执行它时,它可以正常工作,并返回我期望的结果。

我什至尝试使用确切的参数对查询进行硬编码,以确保休眠状态不会更改查询中的任何内容,并且仍然失败。而且,当休眠将其记录到控制台时,我会从字面上复制该查询,并且在终端中可以正常工作。

这是具有硬编码值的查询,以及扩展JpaRepository<Saying, Long>的接口内部执行该方法的方法:

@Query(value="select saying_id from saying_tags group by saying_id having count(distinct case when tags_id in (33) then tags_id else 0 end) = 1 and min(case when tags_id in (33) then tags_id else 0 end) > 0", nativeQuery=true)
public List<Saying> getSayingsContainingExactlyGivenTags();

1 个答案:

答案 0 :(得分:1)

您的查询会投影一个名为saying_id的标量值,但是您将返回List个实体中的Saying个。您的投影应包含Saying实体的所有属性。您可能还需要@SqlResultSetMapping以确保将结果集正确映射到您的实体。

相关问题