簡體   English   中英

Hibernate + JPA Criteria API不能在多對多關系查詢中設置參數?

[英]Hibernate + JPA Criteria API not setting parameters in Many-To-Many relationship query?

我在Schedule和Agent之間(通過屬性signedAgents)具有多對多關系。

我想查找包含我提供的任何代理的日程表。 我正在嘗試這樣做:

List<Agent> agentsToMatch = // ... I want schedules with any of these agents

CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Schedule> query = cb.createQuery(Schedule.class);
Root<Schedule> schedule = query.from(Schedule.class);
query.where(schedule.get(Schedule_.assignedAgents).in( agentsToMatch ));

使用Hibernate 5.2.7,在數組中提供2個代理時,我得到以下查詢:

select generatedAlias0 from Schedule as generatedAlias0 where generatedAlias0.assignedAgents in (:param0, :param1)

但是,似乎沒有設置參數,因為出現以下異常:

WARN [qtp1782580546-44] o.h.engine.jdbc.spi.SqlExceptionHelper:129 - SQL Error: 0, SQLState: 22023
ERROR [qtp1782580546-44] o.h.engine.jdbc.spi.SqlExceptionHelper:131 - No value specified for parameter 1.
javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not extract ResultSet
  at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
  at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
  at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1419)
  at org.hibernate.Query.getResultList(Query.java:427)
  at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:72)

有什么想法我可能會出錯嗎?

我通過用.join替換.get來解決此問題:之前:

query.where(schedule.get(Schedule_.assignedAgents).in( agentsToMatch ));

后:

query.where(schedule.join(Schedule_.assignedAgents).in( agentsToMatch ));

正確的方法應該是

query.where(schedule.get(Schedule_.assignedAgents)
.in(cb.parameter(List.class, "agentsToMatch" );

然后您為查詢提供參數

query.setParameter("agentsToMatch", agentsToMatch);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM