2012-05-18 5 views
1

Предположим, у меня есть список идентификаторов, связанных с сущностью, хранящейся в списке. Если я передам этот список в функцию, если я использую ключевое слово IN в JPQL, тогда я должен получить ту же функциональность, что и использование в языке запросов reqular, который я принимаю ...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"), 

Что я мог делать неправильно здесь? Одна вещь, о которой я подумал, это то, что у меня есть массив целых чисел ... EntityID - это на самом деле длинные ... которые могут вызвать небольшое варево-ха-ха!

ответ

1

Если тип атрибута listId в EntityList длинный, то тип параметра IN должен быть одинарным. Long или long значение или 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 параметр IN, когда путь указывает на долго, но по крайней мере, с реализацией в Hibernate, что это не так.

Смежные вопросы