Bonjour, Voici mon problème:

J'utilise GWT 2 avec Spring et Gilead 1.3 et notamment 2 tables dans ma base de données "Animal" et "Propriétaire". Un animal a un seul propriétaire et un propriétaire peut avoir plusieurs animaux. Lorsque je sélectionne un animal, j'aimerais donc que son propriétaire soit recherché automatiquement, et lorsque je sélectionne un propriétaire, que les animaux soient recherchés automatiquement également. Je vais donc devoir utiliser un Set<Animal> dans ma classe Serializable Proprietaire et c'est là que ça bug...

Voici donc mes fichiers de mapping:

Animal.hbm.xml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
  <class name="be.ac.ulg.cvu.domain.Animal" table="cvu_animal">
    <id name="id_animal" column="ID_ANIMAL">
      <generator class="native"/>
    </id>
    <property name="num_sap" column="num_sap"/>
    <property name="boucle" column="boucle"/>
    <property name="sexe" column="sexe"/>
    <property name="race" column="race"/>
    <property name="poids" column="poids"/>
    <property name="date_naissance" column="date_naissance"/>
    <property name="decede" column="is_decede"/>
 
    <many-to-one lazy="false" name="proprietaire" column="id_proprietaire"
                 class="be.ac.ulg.cvu.domain.Proprietaire"
                 cascade="none" />
 
  </class>
</hibernate-mapping>
Proprietaire.hbm.xml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
  <class name="be.ac.ulg.cvu.domain.Proprietaire" table="cvu_proprietaire">
    <id name="id_proprietaire" column="ID_PROPRIETAIRE">
      <generator class="native"/>
    </id>
    <property name="nom"/>
    <property name="prenom"/>
    <property name="adresse"/>
    <property name="cp"/>
    <property name="localite"/>
    <property name="fixe"/>
    <property name="mobile"/>
 
    <set name="animals" cascade="all" lazy="false">
    		<key column="id_proprietaire" />
    		<one-to-many class="be.ac.ulg.cvu.domain.Animal" />
    </set> 
 
  </class>
</hibernate-mapping>
Mes 2 classes Serializable :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public class Proprietaire extends net.sf.gilead.pojo.gwt.LightEntity implements Serializable {
	
	Long id_proprietaire;
	String nom;
	String prenom;
	String adresse;
	int cp;
	String localite;
	String mobile;
	String fixe;
	Set<Animal> animals;
+get et set
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public class Animal extends net.sf.gilead.pojo.gwt.LightEntity implements Serializable {
 
	Long id_animal;
	int num_sap;
	String boucle;
	String sexe;
	String race;
	int poids;
	Date date_naissance;
	boolean decede;
	Proprietaire proprietaire;
+get et set
et finallement mon webservice :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class AnimalServiceImpl extends PersistentRemoteService implements AnimalService {
 
	private HibernateUtil gileadHibernateUtil = new HibernateUtil();
 
	public AnimalServiceImpl() {
 
	    gileadHibernateUtil.setSessionFactory(be.ac.ulg.cvu.util.HibernateUtil.getSessionFactory());
 
	    PersistentBeanManager persistentBeanManager = new PersistentBeanManager();
	    persistentBeanManager.setPersistenceUtil(gileadHibernateUtil);
	    persistentBeanManager.setProxyStore(new StatelessProxyStore());
 
	    setBeanManager(persistentBeanManager);
	}
 
	@Override
	public List<Animal> getAnimals() {
	    Session session = gileadHibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    List<Animal> animals = new ArrayList<Animal>(session.createSQLQuery("select * from cvu_animal").addEntity(Animal.class).list());
 
	    session.getTransaction().commit();
	    return animals;
	}
(be.ac.ulg.cvu.util.HibernateUtil.getSessionFactory() renvoie la session créée comme suit : sessionFactory = new Configuration().configure().buildSessionFactory(); )
Je n'ai pas encore fait les configurations pour que Spring se charge de gérer la session à ma place..

Je n'arrive pas à me débarrasser de cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:764)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:727)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:616)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
	at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616)
	at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:474)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:571)
	[....]
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:746)
	... 32 more
Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'org.hibernate.collection.PersistentSet' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = [be.ac.ulg.cvu.domain.Animal@96b86b]
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:614)

Si quelqu'un peut m'aider, ce serait vraiment cool !