簡體   English   中英

使用TopLink在JPA查詢中列出作為命名參數

[英]List as a named parameter in JPA query using TopLink

在以下JPA查詢中,:fcIds命名參數需要是整數值列表:

@NamedQuery(name = "SortTypeNWD.findByFcIds", query = "SELECT s FROM SortTypeNWD s WHERE s.sortTypeNWDPK.fcId IN (:fcIds)")

從邏輯上講,這是在調用命名查詢時執行的操作:

Query findByDatesPlFcIds = em.createNamedQuery("SortTypeNWD.findByFcIds");
findByDatesPlFcIds.setParameter("fcIds", fcIds);

變量fcIds是包含整數的ArrayList。

以上所有代碼都適用於Hibernate但不適用於TopLink:

Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter fcIds with expected type of int from query string SELECT s FROM SortTypeNWD s WHERE s.sortTypeNWDPK.fcId IN (:fcIds).

在TopLink中使用List作為命名參數是否有解決方法? 可以強制命名參數的類型嗎?

Toplink實現了JPA 1.0,它不支持將列表作為參數傳遞(collection_valued_input_parameter是文檔中使用的術語)。 JPA 2.0支持這一點,JPA 2.0是在TopLink的后繼者EclipseLink中實現的。

如果您必須堅持使用TopLink,那么您需要編寫一個循環以將列表中的每個項目作為參數包含在內。

我遇到了類似的要求,並且當我將query.setParameter(“fcIds”,fcIds)更改為setParameterList(“fcIds”,fcIds)時成功了。 唯一的區別是我需要在使用Hibernate時進行此更改(我沒有使用TopLink),相比之下你暗示setParamter()似乎正在使用Hibernate。

暫無
暫無

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

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