2012-01-20 6 views
0

WAS 6.1에서 JPA를 사용하고 있습니다. 내 SystemOut.log에에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(); 

나는이 얻을 : 나는이 줄을 실행하려고 org.apache.openjpa.persistence.PersistenceException: Array index out of range: 48

어디 위의 코드에서 배열 범위를 벗어난 것입니다된다? (이것은 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 여러분의 도움에 감사드립니다 무엇 무엇인지 알아낼 수 없습니다

EnumValueHandler.java : 오류는이 라인 번호 (100)에 제공됩니다.

편집 : 답변 해 주셔서 감사합니다. 이 열은 실제로 다음과 같은 서수에 매핑됩니다.

@Column (name = "SVC_ID") @Enumerated (EnumType.ORDINAL) protected ServiceType service;

하지만 서수의 범위는 어디에서 설정합니까? 그것은 범위 밖의 48을 만든다.

답변

1

로드되는 엔티티 필드 중 하나는 서수로 매핑 된 enum입니다.

이것은 enum의 서수가 데이터베이스에 저장되고 해당 enm 인스턴스를 찾기 위해 객체를로드 할 때 사용됨을 의미합니다.

그리고 해당 열거 형에 5 개의 값이있는 경우 0부터 4까지의 유효한 서수 중 하나 대신 데이터베이스의 셀에 값 48이 포함됩니다 (최소한 49 개의 인스턴스와 함께 enum이 필요함).

간단히 말해서 데이터베이스의 데이터가 잘못되었거나 열거 형으로 매핑되어서는 안됩니다.

+0

고마워요. 제 EDIT를 친절하게 볼 수 있습니까? – Victor

+1

서수는 열거 형에 대해 컴파일러에서 자동 생성되며 해당 값을 변경할 수있는 방법이 없습니다. 처음 선언 된 enum 인스턴스는 0이고, 두 번째 인스턴스는 1 등입니다. –

+0

감사합니다. 그럼 왜 48이 범위를 벗어 났습니까? – Victor

관련 문제