sql - Hibernate 无法从终端执行可以正常执行的查询
问题描述
我有一个 spring boot 项目(在 linux 上)和一个简单的数据库,它由两个实体组成 - 说法和标签。Saying 可以有多个标签,每个标签可以用来标记多个说法,所以是多对多的关系。表saying_tags
用于使用它们的 id 连接说法和标签。
当我尝试使用此查询选择具有精确指定标签的所有语句,并且该查询选择了某些内容(结果不为空)时,休眠会抛出异常,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();
解决方案
您的查询投射一个名为 的标量值saying_id
,但您返回的是一个List
实体Saying
。您的投影应包含Saying
实体的所有属性。您可能还需要@SqlResultSetMapping
确保将结果集正确映射到实体。
推荐阅读
- python - Pandas groupby 在保留多个聚合的组内排序并用 facet 可视化它
- pycharm - 如何将 Tab 键映射到 WebStorm 中的 *select* 自动完成选项,而不是 *inserting* 它们
- visual-studio-code - 在 VScode markdown 中显示 Julia 代码输出
- agora.io - agora websdk 得到 obs 相机而不是我的笔记本电脑相机
- azure - 使用 Azure 的 Helm 导致 401 Unauthorized
- javascript - React Router - 身份验证后的重定向延迟
- java - CompletedStage.completedFuture VS CompletedStage.completedStage
- c++ - 如何制作“#include
" 和 "使用命名空间 ocilib" 在 Eclipse c++ 中实现了吗? - .htaccess - 重定向包含锚点 (#) 的 url
- python - Django允许为单个记录上传多个文件