首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有java ArrayList的Hibernet

带有java ArrayList的Hibernet
EN

Stack Overflow用户
提问于 2012-04-23 18:31:24
回答 3查看 5.4K关注 0票数 0

我试图使用ArrayList来持久化对象(PERSON),但我得到了以下命令:

代码语言:javascript
运行
复制
ERROR:2012-04-23 20:58:54,336 org.hibernate.property.BasicPropertyAccessor  - IllegalArgumentException in class: Entities.Person, setter method of property: msgList
ERROR:2012-04-23 20:58:54,336 org.hibernate.property.BasicPropertyAccessor  - expected type: java.util.ArrayList, actual value: org.hibernate.collection.PersistentList

个人班:

代码语言:javascript
运行
复制
public class Person implements Serializable {

    static final long serialVersionUID = 1L;

    private long id;
    private String _email;
    private ArrayList<AnsMsg> msgList=new ArrayList<AnsMsg>();

     long getId() {
        return id;
    }
  public void setId(long id) {
    this.id = id;
}
  public String getEmail() {
    return _email;
}


public void set_email(String _email) {
    this._email = _email;
}

public ArrayList<AnsMsg> getMsgList() {

   return msgList;
}


public void setMsgList(ArrayList<AnsMsg> msgList) {
    this.msgList = msgList;
}
}

Hbm人:

代码语言:javascript
运行
复制
    <hibernate-mapping>
    <class name="Entities.Person" table="PERSON">
        <id name="id" type="long">
            <column name="ID" />
            <generator class="increment" />
        </id>
        <property name="_email" type="java.lang.String" access="field">
            <column name="_EMAIL" />
        </property>

     <list name="msgList" cascade="all"  >
           <key column="parent_id"/>
             <index column="idx" />
            <one-to-many class="msg.AnsMsg" />
        </list>

    </class>
</hibernate-mapping>

现在我不想用List代替ArrayList

代码语言:javascript
运行
复制
(private List<AnsMsg> msgList=new ArrayList<AnsMsg>();)

因为当我从DB获得person时,返回org.hibernate.collection.PersistentList,我需要序列化和反序列化这个对象(Java和android ),而"org.hibernate.collection.PersistentList“不是可序列化的(或者我错了,因为当我试图在android端反序列化时得到空对象)。

这是我的反序列化/序列化方法:

代码语言:javascript
运行
复制
 public static byte[] serializeObject(Object o) { 
            ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

            try { 
              ObjectOutput out = new ObjectOutputStream(bos); 
              out.writeObject(o); 
              out.close(); 


              byte[] buf = bos.toByteArray(); 

              return buf; 
            } 
            catch(IOException ioe)
            { 


              return null; 
            }
              catch(Exception e)
                {


                return null;
                }

          } 

 public static Object deserializeObject(byte[] b) {



Object object=null;
          try { 


ObjectInputStream in = new ObjectInputStream(new       ByteArrayInputStream(b)); 
               object = in.readObject(); 
              in.close(); 

              return object; 
        } catch(ClassNotFoundException cnfe) { 


          return null; 
        } catch(IOException ioe) { 


          return null; 
        } 
        catch(Exception e)
        {

        String ex=e.toString();
        return object; 
        }
      }

更新:

当我尝试使用List代替ArrayList时

当我尝试在android端(使用"deserializeObject“方法)反序列化这个对象时

代码语言:javascript
运行
复制
object = in.readObject(); 

线是扔的

代码语言:javascript
运行
复制
java.lang.ClassNotFoundException: org.hibernate.collection.PersistentList. 

通过这种方式,我尝试使用ArrayList。

如何映射这个数组列表?或者在这种情况下还有一种更好的方法来处理Hibernate?

提前谢谢..。

EN

回答 3

Stack Overflow用户

发布于 2012-04-23 18:48:55

您使用的是ArrayList,它是列表接口的实现,hibernate返回的是PersistentList,这也是列表接口的实现。因此,您不应该特定于ArrayList,将您的ArrayList更改为java.util.List,以便它可以接受java.util.List的任何实现。它也能解决你的问题。

票数 2
EN

Stack Overflow用户

发布于 2012-04-23 18:34:01

您在POJO方法签名中的类型仍然是ArrayList,需要将其更改为处处列出。

票数 1
EN

Stack Overflow用户

发布于 2012-04-23 21:20:44

你走错路了。以下是您可以选择的选项:

  • 将实体复制到POJO并将其发送到android设备。(无效)
  • 将hibernate作为库添加到android应用程序中。这对android来说太过分了。(让你的android应用程序臃肿)
  • 使用不同的序列化方法(JSON,XML)

我会使用不同的序列化方式- JSON。有些库使这个过程变得非常无痛。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10286192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档