2015-07-20 108 views
2

我試圖從0123A關係的JPA查詢中獲得結果。我有實體 -無法在JPA查詢中使用「IN」

A.java 
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER) 
@JoinTable(name = "a_tags") 
private List<Tag> tags; 

然後我嘗試運行下面的查詢 -

Query query2 = entityManager 
      .createQuery("select s from A s where s.tags IN(:tags)"); 
    query2.setParameter("tags", findTags(keyword)); 

但我不斷收到以下錯誤java.sql.SQLException: No value specified for parameter 1

我以前使用過IN的條件,但只是爲了檢查集合中的單個對象。

任何指針?

相關信息 -

  • 的Hibernate 4.3.5決賽

回答

3
select distinct s from A s join s.tags t where t IN (:tags) 
+0

工作。是因爲'ManyToMany'映射而需要'JOIN'?因爲IIRC,它在'ManyToOne'中不是必需的。 – lazyprogrammer

+0

的確,它是必需的,因爲標籤是一個集合(一對多或多對多)。 –

-1

當使用在具有集合值參數,你不需要使用(...)

Query query2 = entityManager 
      .createQuery("select s from A s where s.tags IN :tags"); 
    query2.setParameter("tags", findTags(keyword)); 
+0

試過了,它也給出了同樣的錯誤。 – lazyprogrammer

+0

query2.setParameterList(「tags」,findTags(關鍵字)) – prsmax