JPA Array索引超出范围

时间:2012-01-20 20:16:32

标签: jpa websphere

我在WAS 6.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: 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) protected ServiceType服务;

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

1 个答案:

答案 0 :(得分:1)

加载的实体的一个字段是enum,映射为序数。

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

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

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