2012-01-20 10 views
0

私はWAS 6.1でJPAを使用しています。私は、この行を実行しよう: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

を? (これは、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 はあなたの助けをありがとう何であるかを把握することはできません

EnumValueHandler.java:エラーは、このライン#100で提供されます。

編集:回答ありがとうございます。カラムは、実際、このような順序にマッピングされている:

@Column(名= "SVC_ID") @Enumerated(EnumType.ORDINAL) 保護されたサービス・タイプのサービス。

しかし、どこで序数の範囲を設定しますか?それは48を範囲外にします。

答えて

1

ロードされるエンティティのフィールドの1つは、序数としてマップされたenumです。

これは、enumの序数がデータベースに格納され、オブジェクトをロードして対応するenmインスタンスを見つけるときに使用されることを意味します。

有効な序数の1つ(その列挙に5つの値がある場合は0〜4)の代わりに、データベースのセルに値48が含まれます(少なくとも49のインスタンスでen enumが必要です)。

要するに、データベース内のデータが無効であるか、列挙型にマップされていてはなりません。

+0

ありがとうございます。あなたは親切に私の編集を見ることができますか? – Victor

+1

序数は任意の列挙型のためにコンパイラによって自動生成され、その値を変更する方法はありません。最初に宣言されたenumインスタンスは0、2番目のインスタンスは1などです。 –

+0

ありがとうございます。では、なぜ48が範囲外ですか? – Victor

関連する問題