我有一个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();
答案 0 :(得分:1)
您的查询会投影一个名为saying_id
的标量值,但是您将返回List
个实体中的Saying
个。您的投影应包含Saying
实体的所有属性。您可能还需要@SqlResultSetMapping
以确保将结果集正确映射到您的实体。