0

JPAが管理する次のエンティティを使用して、グラスフィッシュにWebアプリケーションをデプロイしようとしています。データベースでは、 int の配列がvarcharに格納されており、この文字列をセッター/ゲッターで分割/結合します

@Entity
public class MyClass
    implements Serializable
    {
    private long id;
    private int arrayofInt[];
    (...)

    private static String join(int array[])
        {
        StringBuilder b=new StringBuilder();
        for(int i:array)
            {
            if(b.length()!=0) b.append(',');
            b.append(i);
            }
        return b.toString();
        }

    private static int[] split(String s)
        {
        String tokens[]=s.split("[,]");
        int array[]=new int[tokens.length];
        for(int i=0;i< tokens.length;++i)
            {
            array[i]=Integer.parseInt(tokens[i]);
            }
        return array;
        }

    @Column(name="fieldName")
    public String getArrayOfInt()
        {
        return join(arrayOfInt);
        }

    public void setArrayOfInt(String arrayOfInt)
        {
        this.arrayOfInt=split(arrayOfInt);
        }

    @Transient
    public int getCount()
        {
        return this.arrayOfInt.length;
        }
  (....)
  }

アプリケーションを Glassfish にデプロイすると、次のエラーが発生します。

リモート エラー: 展開中にエラーが発生しました: アプリの準備中に例外が発生しました: オフセット 12345 のメソッド MyClass.getCount()I の arraylength のオペランド スタックの型が正しくありません。詳細については、server.log を参照してください。コマンドのデプロイに失敗しました。

getCount を

    @Transient
    public int getCount()
        {
        return 0,
        }

別の新しいエラーが発生します。

リモート障害: 展開中にエラーが発生しました: アプリの準備中に例外が発生しました: メソッド MyClass.getArrayOfInt()Ljava/lang/String のオペランド スタックの型が正しくありません。詳細については、server.log を参照してください。コマンドのデプロイに失敗しました。

どうすればこれを修正できますか?

ありがとう !

4

1 に答える 1

0

私は次の宣言を変更しました:

 private int arrayofInt[];

 private int _arrayofInt[];
 (...)
 public String getArrayOfInt()
        {
        return join(_arrayOfInt);
        }

今は正常に動作しています...(?)

于 2013-02-06T14:57:15.303 に答える