JPA数组索引超出范围

JPA数组索引超出范围,jpa,websphere,Jpa,Websphere,我在WAS6.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.createNamedQuer

我在WAS6.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:数组索引超出范围:48

上面代码中超出范围的数组在哪里?错误出现在第100行:

java(这是一个jpa类)

我不知道什么是
\u vals
什么是
val
谢谢你的帮助

编辑:谢谢你的回答。该列实际上映射到一个序号,如下所示:

@列(name=“SVC\u ID”) @枚举(EnumType.ORDINAL) 受保护的服务类型服务


但是我们在哪里设置序数的范围呢?这使得48超出范围。

加载的实体的字段之一是
枚举,映射为序号

这意味着枚举的序号存储在数据库中,并在加载对象以查找相应的enm实例时使用

数据库中的单元格包含值48,而不是一个有效序号(如果该枚举有5个值,则从0到4),这将需要至少49个实例的en enum


简而言之,数据库中的数据无效,或者不应使用枚举映射。

非常感谢。你能看到我的编辑吗?序号是由编译器为任何枚举自动生成的,没有办法更改它的值。第一个声明的枚举实例有0,第二个有1,等等。谢谢。那么为什么48超出范围呢?因为您的枚举可能少于49个实例。例如,如果将列映射到枚举季节{SPRING,SUMMER,fault,WINTER},则唯一有效的序号是0(表示春季)、1(表示夏季)、2(表示秋季)和3(表示冬季)。48超出此枚举的范围[0-3]。非常感谢。我现在明白了。
 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       }