2012-04-17 15 views
0

で休止状態私は ArrayListを含め、このクラスでHibernateを使用しようとしている:がJavaのArrayList

しかし、私はこの例外を取得:

expected type: java.util.ArrayList, actual value: org.hibernate.collection.PersistentList 

ちょうど一覧はSerializableをis'tので(私はArrayListのを使用する必要があります。

この例外は、jpa entitymanagerが起動したときにスローされます。

これはクラスです:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Apr 17, 2012 9:20:13 PM by Hibernate Tools 3.4.0.CR1 --> 
<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" inverse="false" table="ANSMSG" lazy="true"> 
      <key> 
       <column name="ID" /> 
      </key> 
      <list-index></list-index> 
      <one-to-many class="msg.AnsMsg" /> 
     </list> 

    </class> 
</hibernate-mapping> 

どのように私は事前に おかげで、休止状態でのJavaのArrayListを使用することができます。

package Entities; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 


import msg.AnsMsg; 


public class Person implements Serializable { 

    static final long serialVersionUID = 1L; 

    private long id; 
    public long getId() { 
     return id; 
    } 


    public void setId(long id) { 
     this.id = id; 
    } 


    private String _email; 

    private ArrayList <AnsMsg> msgList=new ArrayList<AnsMsg>(); 



    public ArrayList <AnsMsg> getMsgList() { 

     return msgList; 
    } 


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






    public Person(){} 


    public String getEmail() { 
     return _email; 
    } 


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

これはHBMファイルです。

答えて

0

実際のArrayListクラスではなく、インターフェイスListを関連付ける必要があると思います。 PersistetListドキュメントhttp://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/collection/PersistentList.htmlが表示されている場合は、java.util.Listが実装されています。

+0

問題は私がPersonオブジェクトをServerからAndroidに移動し、AndroidアプリケーションがPersonオブジェクトをDeSerializeしようとしたときに、このリストがArraylistを使用しているため、Listを使用できないためです。あなた...) – user986474

+0

私はカルロスにあなたのコメントを見ました。これについての私の考えは、あなたのオブジェクトをJSON文字列として変換し、アンドロイドアプリでJSONとして扱わない理由です。これにより、シリアライズとデシリアライゼーションのオーバーヘッドを軽減できます。その単なる提案。 – raddykrish

0

Hibernate Javadocによれば、PersistentListもシリアライズ可能です。あなたのPOJOはListへの参照を持つことができますが、実行時にはSerialistであるPersistentListのインスタンスを使用する必要があります。

簡単に言えば、Listインターフェイスを使用するだけです。

+0

同じ問題は、PersonオブジェクトをServerからAndroidに移動し、AndroidアプリケーションがPersonオブジェクトをDeSerializeしようとしたときに、このリストがArraylistを使用するため、nullオブジェクトを取得するということです。リストを使用できません。 ...) – user986474

+0

問題はシリアル化です。休止状態のエンティティが拡張され、シリアライゼーションが困難になる可能性があります(私はJDOと同様の問題があります)。あなたはDTOを試しましたか?シリアライゼーションにはどのようなメカニズムを使用していますか? –

+0

これは私のDeSerializa関数です:public static Object deserializeObject(byte [] b){ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(b)); \t \tオブジェクトオブジェクト= in.readObject(); \t \t in.close();オブジェクトを返す。 – user986474