我在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超出范围。
答案 0 :(得分:1)
加载的实体的一个字段是enum
,映射为序数。
这意味着枚举的序数存储在数据库中,并在加载对象以查找相应的enm实例时使用。
而不是其中一个有效的序数(如果该枚举有5个值,则从0到4),数据库中的单元格包含值48(这需要en enum,至少有49个实例)。
简而言之,数据库中的数据无效,或者不应使用枚举映射。