java - 如何在 Spring Boot 中编写存储库查询以通过关联键进行过滤?
问题描述
如何在存储库接口中编写查询来执行 WHERE assoc_id = :key?
我有一个名为 的实体CmsImpacts
,然后我有一个调用 的服务,ImpactsRepository
如下所示:
import java.util.List;
public interface ImpactsRepository<T extends CmsImpacts> extends BaseCmsRepository<CmsImpacts> {
@Query("SELECT a FROM #{#entityName} a where a.scenarioId = :scenarioId")
List<CmsImpacts> getByScenarioPaged(
Integer scenarioId,
Pageable pageable
);
@Query("SELECT COUNT(a.id) FROM #{#entityName} a where a.scenarioId = :scenarioId")
Integer getAsScenarioCount(
Integer scenarioId
);
}
这种关系的要点是CmsScenarios
一对多CmsImpacts
。实体关系定义为:
@JsonIgnore
@JsonBackReference
@JoinColumn(name = "scenario_id", referencedColumnName = "id")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private CmsScenarios scenarioId;
每当我调用我的服务并传入scenario_id 的整数值时,它都会抛出一个TypeException,因为(理所当然地)需要一个CmsScenario 对象,而不是整数。
错误消息:2020-11-04 15:10:45.764 错误 128396 --- [io-8080-exec-18] osbwservlet.support.ErrorPageFilter:从请求转发到错误页面 [/api/impacts/list/scenario/2 ] 由于异常 [org.springframework.dao.InvalidDataAccessApiUsageException: 参数值 [2] 与预期类型 [com.vw.asa.entities.cms.CmsScenarios (n/a)] 不匹配;嵌套异常是 java.lang.IllegalArgumentException:参数值 [2] 与预期类型不匹配 [com.vw.asa.entities.cms.CmsScenarios (n/a)]]
为了执行这个查询,我需要做什么?这也适用于上面的查询,即分页计数器。
笔记:
我不想只检索CmsScenarios
对象并调用getImpacts()
,这将返回所有对象,我需要能够对它们进行分页。
解决方案
您必须添加相关实体的 id
@Query("SELECT a FROM #{#entityName} a where a.scenarioId.id = :scenarioId")
推荐阅读
- mysql - mysql中区分大小写的选择查询
- mysql - mysql - 使用 where 选择最近的值
- css - 如何使用 CSS 精灵?
- angular - Angular Material - `mat-palette()` 的所有可接受的参数
- spring - 无法在 docker 内的 Spring Boot 应用程序中访问 RDS
- json - 按键名将单个文件拆分为多个文件
- sql - 在 postgres 中多次使用相同的选择
- javascript - 轮播滑块 - 如何平滑地为卡片制作动画?
- jboss - 使用 IBM LDAP 的安全管理控制台 JBOSS EAP 7
- javascript - 在每个图像的顶部动态显示图标