2012-01-20 99 views
0

我在我的WAS 6.1中使用JPA。我試圖執行這一行:我的SystemOut.logJPA數組索引超出範圍

@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

哪裏是在上面的代碼中的數組是走出去的範圍是多少?該錯誤出現在這條線#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(name =「SVC_ID」) @Enumerated(EnumType.ORDINAL) protected ServiceType service;

但是我們在哪裏設置序號的範圍​​?這使得48範圍之外。

回答

1

加載的實體的字段之一是enum,映射爲序號。

這意味着枚舉的序號存儲在數據庫中,並在加載對象以查找相應的enm實例時使用。

而不是其中一個有效的序數(如果該枚舉有5個值,則從0到4),數據庫中的單元格包含值48(這將需要枚舉至少49個實例)。

簡而言之,數據庫中的數據無效,或者不應使用枚舉映射。

+0

非常感謝。你能否看到我的編輯? – Victor

+1

序號由編譯器爲任何枚舉自動生成,並且無法更改其值。第一個聲明的枚舉實例有0,第二個有1,等等。 –

+0

謝謝。那麼爲什麼48超出範圍? – Victor