2012-05-18 57 views
1

假設我有一個與存儲在列表中的實體關聯的ID列表。如果我將這個列表傳遞給一個函數,如果我在JPQL中使用IN關鍵字,那麼我應該得到與在使用中的定時查詢語言中相同的功能,我假設...org.apache.openjpa.persistence.ArgumentException在查詢openJPA中進行

但是我遇到這種異常,只要我嘗試我的代碼運行...我的代碼看起來像這樣...

public void UpdateEntityByPerson(int ID, int[] EntityIDs) { 
    // TODO Auto-generated method stub 
    List<EntityList> distList = null;//new ArrayList<EntityList>(); 
    try{   
     Provider prov = emf.find(Provider.class, new Long(ID)); 
     prov.setDistListPermCollection(null); 
     distList = emf.createNamedQuery("getEntityListByListIds").setParameter("listIds", EntityIDs).getResultList(); 
     prov.setEntityListPermCollection(distList);   
    } 
    catch(Exception ex){ 
     System.out.println("Exception : "+ex); 
     ex.printStackTrace(); 
    } 
} 

這裏是我的JPQL命名查詢...

@NamedQuery(name="getEntityistByListIds", query = "SELECT d FROM EntityList d WHERE d.listId in :listIds"), 

我應該怎麼做是錯在這裏幹什麼?我想到的一件事是我有一個整數數組...... EntityIDs實際上是很長的......可能會導致輕微的brew-ha-ha!

回答

1

當EntityList中listId屬性的類型很長時,那麼IN的參數類型必須是單個Longlong值或List<Long>。所以在你下面樣的參數是適用:

List<Long> EntityIDs = Arrays.asList(new Long[]{1L, 2L}); 
Long EntityIDs = 0; 
long EntityIDs = 0; 

在說明書中對此進行了更一般形式的拼寫如下:

的文字和/或輸入參數值必須像一樣 抽象類型中state_field_path_expression的模式類型。

只允許比較類似類型的值。類型 類似於另一種類型(如果它們對應於相同的Java語言類型 或者其中一種是原始Java語言類型而另一種是包裝的Java類類型等效項)(例如,int和Integer類似於此類型 感)。此規則有一個例外:有效的 可用於比較數字提升規則 適用的數值。嘗試比較不相似類型 值的條件表達式不允許使用,但此數字情況除外。

對於我來說,它看起來是,根據規範你也可以給int參數。當路徑指向長,但至少與Hibernate的實現,並非如此。