JPA数组索引超出范围
我在WAS6.1中使用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
@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 }