Bonjour, voila je tombe sur une exceptio lorsque je réupère des données de la base.
En fait je sauvegarde la classe workspace qui contient une liste de Sensor.
Le sensor peuvent etre de plusieurs, type, voici le fichier XML de sensor :
voici l'extrait du fichier de mapping XML de la table WORKSPACE
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <?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 package="dsi.emc.pac7000.core.sensor"> <class name="Sensor" table="SENSOR" discriminator-value="S"> <id name="id" column="sensor_uid" type="long" unsaved-value="0"> <generator class="identity"/> </id> <discriminator column="SENSOR_TYPE" type="string"/> <property name="name" column="NAME" type="string"/> <subclass name = "dsi.emc.pac7000.core.sensor.demo.DemoSensor" discriminator-value="DEMOSENSOR"> </subclass> <subclass name = "dsi.emc.pac7000.core.sensor.manual.ManualSensor" discriminator-value="MANUALSENSOR"> </subclass> <subclass name = "dsi.emc.pac7000.core.sensor.gagetalker.AbstractGage" discriminator-value="ABSTRACTGAGE"> <property name="nbMinValue" column="NB_MIN" type="int"/> <subclass name = "dsi.emc.pac7000.core.sensor.gagetalker.DigitalGage" discriminator-value="DIGITALGAGE"> </subclass> <subclass name = "dsi.emc.pac7000.core.sensor.gagetalker.AnalogGage" discriminator-value="ANALOGGAGE"> </subclass> <subclass name = "dsi.emc.pac7000.core.sensor.gagetalker.Rs232Gage" discriminator-value="RS232GAGE"> <property name="initialisation" column="INIT" type="string"/> <property name="field" column="FIELD" type="int"/> <bag name="buffers" inverse="false" cascade="all-delete-orphan"> <key column="buffer_uid"/> <one-to-many class="dsi.emc.pac7000.core.sensor.gagetalker.Rs232GageBuffer"/> </bag> <property name="buffer" column="BUFFER" type="string"/> </subclass> </subclass> </class> </hibernate-mapping>
Si mon workspace ne contient que des Manual ou Demo Sensor, il n'y a aucune erreur, mais un DigitalGage ne passe, voici l'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 <class name="WorkSpace" table="WORKSPACE" discriminator-value="W" lazy="false"> <id name="id" column="work_uid" type="long" unsaved-value="0"> <generator class="identity"/> </id> <discriminator column="WORKSPACE_TYPE" type="string"/> <bag name="gages" inverse="false" cascade="all" lazy="false"> <key column="workspace_uid"/> <one-to-many class="dsi.emc.pac7000.core.sensor.Sensor"/> </bag> <subclass name = "DatabaseManager" discriminator-value="DATABASEMANAGER"> </subclass> <subclass name = "HardDisk" discriminator-value="HARDDISK"> <property name="gageFileKey" column="GAGE_FILE_KEY" type="int"/> </subclass> </class>
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of dsi.emc.pac7000.core.persistence.DatabaseManager.setGages
at org.hibernate.tuple.PojoTuplizer.setPropertyValuesWithOptimizer(PojoTuplizer.java:203)
at org.hibernate.tuple.PojoTuplizer.setPropertyValues(PojoTuplizer.java:173)
at org.hibernate.persister.entity.BasicEntityPersister.setPropertyValues(BasicEntityPersister.java:2919)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:113)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:530)
at org.hibernate.loader.Loader.doQuery(Loader.java:436)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at dsi.emc.pac7000.core.persistence.DatabaseManager.getWorkSpace(DatabaseManager.java:343)
... 16 more
Caused by: org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: dsi.emc.pac7000.core.sensor.gagetalker.AbstractGage (Discriminator: DEMOSENSOR)
at org.hibernate.loader.Loader.getInstanceClass(Loader.java:1046)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:924)
at org.hibernate.loader.Loader.getRow(Loader.java:855)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:305)
at org.hibernate.loader.Loader.doQuery(Loader.java:412)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1434)
at org.hibernate.loader.collection.OneToManyLoader.initialize(OneToManyLoader.java:111)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:488)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1430)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:176)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:48)
at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:449)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuffer.append(Unknown Source)
at dsi.emc.pac7000.core.persistence.WorkSpace.setGages(WorkSpace.java:339)
... 18 more
et si on regarde la table SENSOR, voila le resultat.
sensor_uid....SENSOR_TYPE........ NAME.........workspace_uid
___________________________________________________
......1........... DEMOSENSOR ....Démonstration.....1
......2........... MANUALSENSOR...Clavier...............1
......3........... DIGITALGAGE.......... a...................1
si quelqu'un voit d'ou cela peut venir, j'ai vérifié mes classes, j'ai bien :
public class DemoSensor extends Sensor
public class ManualSensor extends Sensor
public abstract class AbstractGage extends Sensor
public class DigitalGage extends AbstractGage
donc je ne comprends pas d'ou cela peut venir.
MErci d'avance pour votre aide
Partager