OneToMany sur une hiérarchie de classe
Bonjour,
voila mon pb :
j'ai une classe gabarit qui possède une relation OneToMany avec une Classe GabaritElement ( qui a 2 classes enfants ) GabaritNote et GabaritCumul. La classe gabarit contient une un Set d'objet GabaritElement et/ou GabaritNote et/ou GabaritCumul.
Je suis un peu nul en java donc c'estpeut être un pb avec mais generic ou ...
voila mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
@Entity
public class Gabarit extends BaseObject {
...
private Set<GabaritElement> elements = new HashSet<GabaritElement>();
@OneToMany
@JoinColumn(name="GABARIT_ID")
public Set<GabaritElement> getElements() {
return elements;
}
...
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="ELEMENT_TYPE",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue("Element")
public class GabaritElement extends BaseObject {
private Gabarit gabarit = null;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinColumn(name="ELEMENT_ID")
public Element getElement() {
return element;
}
} |
Code:
1 2 3 4 5 6
|
@Entity
@DiscriminatorValue("Cumul")
public class GabaritCumul extends GabaritElement {
...
} |
Code:
1 2 3 4 5 6
|
@Entity
@DiscriminatorValue("Note")
public class GabaritNote extends GabaritElement {
...
} |
Mon erreur :
org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: model.GabaritElement (Discriminator: note)
at org.hibernate.loader.Loader.getInstanceClass(Loader.java:1444)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1275)
at org.hibernate.loader.Loader.getRow(Loader.java:1197)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1985)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:163)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:329)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:205)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:137)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:271)
at org.apache.jsp.WEB_002dINF.pages.gabaritconfig_jsp._jspx_meth_c_forEach_2(org.apache.jsp.WEB_002dINF.pages.gabaritconfig_jsp:456)
at org.apache.jsp.WEB_002dINF.pages.gabaritconfig_jsp._jspService(org.apache.jsp.WEB_002dINF.pages.gabaritconfig_jsp:156)
...
Si vous avez une solution.
Merci. Julien C.