如何在Spring引导中编写存储库查询以通过关联键进行筛选



如何在存储库接口中编写查询以执行WHERE assoc_id=:键?

我有一个名为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
);



}

这种关系的要点是CmsScenariosCmsImpacts上的一对多。实体关系定义为:


@JsonIgnore
@JsonBackReference
@JoinColumn(name = "scenario_id", referencedColumnName = "id")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private CmsScenarios scenarioId;

每当我调用我的服务并传入scenario_id的Integer值时,它都会抛出一个TypeException,因为(理所当然(,它需要一个CmsScenario对象,而不是Integer。

错误消息:2020-11-04 15:10:45.764错误128396---[io--8080-exec-18]o.s.b.w.servlet.support.ErrorPageFilter:由于异常[org.springframework.dao.InvalidDataAccessApiUsageException:参数值[2]与预期类型[com.vw.asa.entities.cms.CmsScenarios(n/a(]不匹配,从请求[/api/aimpacts/list/scenation/2]转发到错误页面;嵌套异常为java.lang.IollegalArgumentException:参数值[2]与预期类型[com.vw.asa.entities.cms.CmsScenarios(n/a(]]不匹配

我需要做什么才能执行此查询?这也适用于上面的查询,即分页计数器。

注意:

我不想只检索CmsScenarios对象并调用getImpacts(),这将返回所有对象,并且我需要能够对它们进行分页。

您必须添加相关实体的id

@Query("SELECT a FROM #{#entityName} a where a.scenarioId.id = :scenarioId")