2011-04-06 68 views
1

軟件< -m:N->標籤JPQL查詢多對多

我想選擇其中tag.id = ID

我寫的所有軟件創建查詢:

TypedQuery query = 
       Software.em().createQuery(
       "SELECT DISTINCT s FROM Software s INNER JOIN s.tags WHERE s.tags.id = :tagId", 
       Software.class 
      ); 
       query.setParameter("tagId", tagId); 

的結果我有:

了java.lang.IllegalArgumentException 被抓到, org.hibernate.QueryException:非法 試圖取消引用集合 [software0_.id.tags]與元件 屬性引用[ID] [SELECT DISTINCT 期從models.Software小號 INNER JOIN s.tags WHERE s.tags。 id = :tagId]

我該如何實現它?爲什麼我有這樣的例外?

回答

2

我認爲這個問題可能是你在你的語句中遺漏了FROM子句。 錯誤「Unexpected token:INNER」被給出,因爲它期望一個FROM。

嘗試以下查詢:

SELECT DISTINCT s FROM Software s INNER JOIN s.tags t WHERE t.id = :tagId 
+0

我修正了。也許,但是當我把我從我得到:java.lang.IllegalArgumentException已被捕獲,org.hibernate.QueryException:非法嘗試取消引用具有元素屬性引用[id]的集合[software0_.id.tags] [SELECT DISTINCT s FROM模型。軟件s INNER JOIN s.tags WHERE s.tags.id =:tagId] – ses 2011-04-06 09:32:42

+0

試試這個:'SELECT DISTINCT s FROM Software s INNER JOIN s.tags t WHERE t.id =:tagId'。 – Elvander 2011-04-06 09:44:28

1

我會嘗試:

Query q = JPA.em().createQuery("SELECT DISTINCT s FROM Software s join fetch s.tags t WHERE t.id = :tagId"); 
q.setParameter("tagId", tagId); 

這應該工作。