0

我正在尝试使用 JPA 管理的以下实体在 glassfish 中部署 webapp。在数据库中,一个int 数组存储在varchar中,我在 setter/getter 中拆分/加入这个 String

@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 中时,我收到以下错误:

远程故障:部署期间发生错误:准备应用程序时出现异常:MyClass.getCount()I 方法中数组长度中的操作数堆栈类型错误,偏移量为 12345。有关更多详细信息,请参阅 server.log。命令部署失败。

如果我将 getCount 替换为

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

我收到另一个新错误:

远程故障:部署期间发生错误:准备应用程序时出现异常:MyClass.getArrayOfInt()Ljava/lang/String 方法中操作数堆栈上的类型错误;在偏移量 45678。有关更多详细信息,请参阅 server.log。命令部署失败。

我怎样才能解决这个问题 ?

谢谢 !

4

1 回答 1

0

我更改了以下声明:

 private int arrayofInt[];

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

现在它工作正常......(?)

于 2013-02-06T14:57:15.303 回答