Индекс массива JPA вне диапазона - PullRequest
0 голосов
/ 21 января 2012

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

@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 Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: Спасибо за ответ. Столбец действительно отображается на порядковый номер так:

@ Column (имя = "SVC_ID") @Enumerated (EnumType.ORDINAL) защищенный сервис ServiceType;

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

1 Ответ

1 голос
/ 21 января 2012

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

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

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

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

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