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
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 <?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>
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
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>
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 setet 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 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
(be.ac.ulg.cvu.util.HibernateUtil.getSessionFactory() renvoie la session créée comme suit : sessionFactory = new Configuration().configure().buildSessionFactory(); )
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; }
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 !![]()
Partager