Discriminateur , WrongClassException JPA Hibernate backend
J'ai une obligation d'avoir un résumé de la superclasse.
J'ai 6 sous-classes pour que les super-classe abstraite.
Je l'ai associé avec le SINGLE_TABLE stratégie de l'héritage en JPA.
Dans un autre POJO j'ai un "un à plusieurs" de la relation avec ces 1+6 classes.
@OneToMany(mappedBy = "mSearchPreference", cascade = CascadeType.ALL)
private Set<SearchCriteria> mSearchCriteria;
ici "SearchCriteria" est la classe abstraite.
@Entity
@Table(name = "SRCH_CRTR_T", schema = "LPEW")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "SRCH_DISCRIMINATOR_CDE", discriminatorType = DiscriminatorType.STRING)
@org.hibernate.annotations.ForceDiscriminator
public abstract class SearchCriteria extends BaseDBObject implements Comparable<SearchCriteria>
et il a 6 béton sous-classes des classes comme
@Entity
@DiscriminatorValue("DATE")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class SearchCriteriaDateRange extends SearchCriteria
Je peux insérer les valeurs dans la table, mais quand je suis en récupération, j'obtiens une erreur:
Caused by: org.hibernate.WrongClassException: Object with id: 261 was not of the specified subclass: com.lmig.lit.lpew.model.criteria.SearchCriteria (Discriminator: DATE )
at org.hibernate.loader.Loader.getInstanceClass(Loader.java:1453)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1284)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.L
10:57:44,786 INFO [STDOUT] oader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
at org.hibernate.loader.collection.BatchingCollectionInitializer.initialize(BatchingCollectionInitializer.java:52)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:63)
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.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
at org.hibernate.collection.PersistentSet.add(PersistentSet.java:187)
at com.lmig.lit.lpew.model.homescreen.HomeScreenPreference.addSearchCriteriaByType(HomeScreenPreference.java:132)
at com.lmig.lit.lpew.model.homescreen.HomeScreenPreference.addSearchCriteriaByType(HomeScreenPreference.java:147)
at com.lmig.lit.lpew.service.LpewUserServiceImpl.initializeHomeScreenPreferences(LpewUserServiceImpl.java:135)
at com.lmig.lit.lpew.service.LpewUserServiceImpl.findUserAndInitialize(LpewUserServiceImpl.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy122.findUserAndInitialize(Unknown Source)
at com.lmig.lit.lpew.jsf.beans.UserSession.getLpewUser(UserSession.java:989)
at com.lmig.lit.lpew.jsf.beans.RequestForServiceBean.getAllRequests(RequestForServiceBean.java:263)
at com.lmig.lit.lpew.jsf.beans.RequestForServiceBean.getAllNewRequests(RequestForServiceBean.java:382)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
at org.apache.el.parser.AstValue.getValue(AstValue.java:97)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
Quelqu'un sait-il la solution?
est-ce le problème avec discriminateur ou problème avec lazyinitialization?
Comment faites-vous pour charger les cas, par une requête explicite ou implicite par naviguer jeter une association? Et est le chargement paresseux impliqués?
naviguer à travers une association. j'ai mentionné ces annovations relation onetomany grâce à cette relation que je suis de chargement, oui je suis paresseusement chargement instances.
Essayez cette stackoverflow.com/q/42599203/4424739 Il fonctionne pour moi.
Essayez cette solution: stackoverflow.com/a/48788554/4424739 Il fonctionne pour moi.
Comment faites-vous pour charger les cas, par une requête explicite ou implicite par naviguer jeter une association? Et est le chargement paresseux impliqués?
naviguer à travers une association. j'ai mentionné ces annovations relation onetomany grâce à cette relation que je suis de chargement, oui je suis paresseusement chargement instances.
Essayez cette stackoverflow.com/q/42599203/4424739 Il fonctionne pour moi.
Essayez cette solution: stackoverflow.com/a/48788554/4424739 Il fonctionne pour moi.
OriginalL'auteur Satish Kumar | 2010-12-02
Vous devez vous connecter pour publier un commentaire.
vous devez utiliser
@org.hibernate.annotations.DiscriminatorOptions(force=true)
sur la racine de votre entitéOriginalL'auteur sdespolit
Votre trace de la pile ressemble si vous êtes layz chargement d'un ensemble de SearchCriteria enities.
par exemple:
@OneToMany(mappedBy = "mSearchPreference", cascade = CascadeType.TOUTES les)
un Ensemble privé mSearchCriteria;
Le problème est qu'Hibernate ne pouvez pas savoir le bon sous-classe sans le chargement de l'entité.
Donc, si le jeu est créé par le chargement paresseux, hibernate d'abord créer proxy de type SearchCriteria pour toutes les entités de l'ensemble. Si le concreate instance est chargée plus tard, qu'il n'existe aucun moyen pour l'échange de la non concreate assez proxy par celui de droite.
https://forum.hibernate.org/viewtopic.php?f=1&t=996047&start=0
si je garde le (fetch = FetchType.DÉSIREUX), je suis encore en train de le lazyinitializationexception, mais dans mon application, tous les autres le chargement différé et désireux fetchings fonctionnent très bien, mais c'est le seul exemple de l'héritage de la cartographie dans notre application, de sorte que je me bats.
oui la DATE est d'avoir un espace blanc, j'ai changé dans la BASE de données mais toujours même problème.
j'ai parcouru de nombreux sites de forums où quelqu'un a parlé de l'usage de la force discriminateur, je l'ai essayé mais tat était pas non plus de travail.
Maintenant, les (toutes) les Espacements sont fixes, et que vous avez modifié l'association AVIDES de chercher - et vous obtenez toujours la MÊME exception?
OriginalL'auteur Ralph