2012-01-20 5 views
0

Я использую JPA в своем WAS 6.1. Я пытаюсь выполнить эту строку:JPA Индекс массива вне допустимого диапазона

@Entity 
@Table(name="some_Table") 
@NamedQueries({ 
@NamedQuery(name="getAllAccountTypeService", 
query="SELECT a FROM AccountTypeServiceAssoc a " + 
"WHERE a.delete.deletedDate IS NULL ") 

..... 

Query query = em.createNamedQuery("getAllAccountTypeService"); 
return query.getResultList(); 

Я получаю это на мой SystemOut.log: org.apache.openjpa.persistence.PersistenceException: Array index out of range: 48

Где массив в приведенном выше коде, который выходит из диапазона? Ошибка происходит в этой линии # 100:

EnumValueHandler.java (Это JPA класс)

public Object toObjectValue(ValueMapping vm, Object val) { 
    97   if (val == null) 
    98    return null; 
    99   if (_ordinal) 
    100    return _vals[((Number) val).intValue()]; 
    101   return Enum.valueOf(vm.getType(), (String) val); 
    102  } 

Я не могу понять, что это _vals и что val Спасибо за вашу помощь.

EDIT: Благодарим вас за ответ. Колонна действительно отображаются на порядковый так:

@column (имя = "SVC_ID") @Enumerated (EnumType.ORDINAL) защищенного сервис ServiceType;

Но где мы устанавливаем диапазон Ординала? Это делает 48 вне диапазона.

ответ

1

Одним из полей загружаемых объектов является enum, отображаемый как порядковый номер.

Это означает, что порядковый номер перечисления хранится в базе данных и используется при загрузке объекта для поиска соответствующего экземпляра enm.

И вместо одного из действительных ординалов (от 0 до 4, если для этого перечисления 5 значений), ячейка в базе данных содержит значение 48 (для чего требуется en enum с не менее чем 49 экземплярами).

Короче говоря, данные в базе данных недействительны или не должны отображаться с перечислением.

+0

Большое спасибо. Вы можете увидеть мой EDIT? – Victor

+1

Ординал автогенерируется компилятором для любого перечисления, и нет возможности изменить его значение. Первый объявленный экземпляр enum имеет 0, второй - 1 и т. Д. –

+0

Спасибо. Итак, почему 48 из-за пределов? – Victor

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