Индексът на JPA масив е извън диапазона

Използвам 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 Благодаря ви за помощта.

EDIT: Благодаря ви за отговора. Колоната наистина е съпоставена с порядък като този:

@Column(name="SVC_ID") @Enumerated(EnumType.ORDINAL) защитена ServiceType услуга;

Но къде да зададем диапазона на Ordinal? Това прави 48 извън диапазона.


person Victor    schedule 20.01.2012    source източник


Отговори (1)


Едно от полетата на обектите, които се зареждат, е enum, нанесено като порядък.

Това означава, че поредният номер на enum се съхранява в базата данни и се използва при зареждане на обекта за намиране на съответния екземпляр на enm.

И вместо един от валидните ординали (от 0 до 4, ако има 5 стойности за това преброяване), клетката в базата данни съдържа стойност 48 (което би изисквало enum с поне 49 екземпляра).

Накратко, данните в базата данни са невалидни или не трябва да бъдат картографирани с enum.

person JB Nizet    schedule 20.01.2012
comment
Благодаря много. Можете ли любезно да видите моето РЕДАКТИРАНЕ? - person Victor; 21.01.2012
comment
Поредният номер се генерира автоматично от компилатора за всяко преброяване и няма начин да се промени стойността му. Първият деклариран екземпляр на enum има 0, вторият има 1 и т.н. - person JB Nizet; 21.01.2012
comment
Благодаря ти. Така че защо 48 е извън диапазона? - person Victor; 21.01.2012
comment
Тъй като вашият enum вероятно има по-малко от 49 екземпляра. Например, ако съпоставите колона с enum Сезон { ПРОЛЕТ, ЛЯТО, ЕСЕН, ЗИМА }, единствените валидни редни числа са 0 (за ПРОЛЕТ), 1 (за ЛЯТО), 2 (за ЕСЕН) и 3 (за ЗИМА) . 48 е извън диапазона [0 - 3] за това изброяване. - person JB Nizet; 21.01.2012
comment
Благодаря ти много. Сега го разбрах. - person Victor; 21.01.2012