IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

java.lang.IllegalArgumentException: Unknown name value for enum class


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut java.lang.IllegalArgumentException: Unknown name value for enum class
    Bonjour,


    J'ai une classe DepenseBeneficiaire.java, avec une clef compos�e d'attributs provenant d'une classe DepenseBeneficiaireId.java. Parmi ces attributs de DepenseBeneficiaireId se trouve une �num�ration permettant de d�terminer le type de d�pense.

    Ma classe se sauvegarde en base sans probl�me, mais la relecture bloque au moment o� il faut matcher depense_id (champ de ma BDD) avec l'enum NatureDepense.


    DepenseBeneficiaire.java
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    @Entity
    @Table(name="dep_beneficiaire")
    public class DepenseBeneficiaire implements Serializable
    {
     
     
    	private static final long serialVersionUID = 3872180192633198521L;
    	public static final String FIELD_IDBENEFICIAIRE	= "identifier";
    	public static final String FIELD_BENEFICIAIRE	= "beneficiaire";
     
    	private DepenseBeneficiaireId identifier;
     
    	@EmbeddedId
    	@AssociationOverrides
    	({
    		@AssociationOverride
    		(
    			name="beneficiaire",
    			joinColumns=
    			{
    				@JoinColumn(name="dossier_id", referencedColumnName="dossier_id"),
    				@JoinColumn(name="action_id", referencedColumnName="action_id"),
    				@JoinColumn(name="beneficiaire_id", referencedColumnName="id")
    			}
    		),
    		@AssociationOverride
    		(
    			name="depense_id",
    			joinColumns=
    			{
    				@JoinColumn(name="depense_id", referencedColumnName="depense_id")
    			}
    		)
    	})
    	public DepenseBeneficiaireId getIdentifier() {
    		return identifier;
    	}
    	public void setIdentifier(DepenseBeneficiaireId identifier) {
    		this.identifier = identifier;
    	}
    	@ManyToOne
    	@JoinColumns
    	({
    		@JoinColumn(name="dossier_id", referencedColumnName="dossier_id", insertable=false, updatable=false),
    		@JoinColumn(name="action_id", referencedColumnName="action_id", insertable=false, updatable=false),
    		@JoinColumn(name="beneficiaire_id", referencedColumnName="id", insertable=false, updatable=false)
    	})
    	public Beneficiaire getBeneficiaire()
    	{
    		return identifier.getBeneficiaire();
    	}
    	public void setBeneficiaire(Beneficiaire beneficiaire)
    	{
    		identifier.setBeneficiaire(beneficiaire);
    		if(beneficiaire.getAdherent_Id() 	!= null) setBeneficiaire_type("A");
    		if(beneficiaire.getFournisseur_Id() != null) setBeneficiaire_type("F");
    		if(beneficiaire.getOrganisme_Id() 	!= null) setBeneficiaire_type("O");
    		if(beneficiaire.getStagiaire_Id() 	!= null) setBeneficiaire_type("S");
    	}
    	@Column(name="depense_id", length=3, insertable=false, updatable=false)
    	public NatureDepense getDepense_id() {
    		return identifier.getDepense_id();
    	}
    	public void setDepense_id(NatureDepense depense_id) {
    		this.identifier.setDepense_id(depense_id);
    	}
     
    	public DepenseBeneficiaire()
    	{
    		identifier = new DepenseBeneficiaireId();
    	}
     
    	public DepenseBeneficiaire(NatureDepense natureDepense)
    	{
    		this();
    		setDepense_id(natureDepense);
    	}
     
    	@Override
    	public boolean equals(Object obj)
    	{
    		if(!(obj instanceof DepenseBeneficiaire))
    			return false;
    		DepenseBeneficiaire depenseBeneficiaire = (DepenseBeneficiaire)obj;
    		return
    			new EqualsBuilder()
    			.append(depenseBeneficiaire.getIdentifier(), getIdentifier())
    			.isEquals();
    	}
     
    	@Override
    	public int hashCode()
    	{
    		return
    			new HashCodeBuilder()
    			.append(getIdentifier())
    			.toHashCode();
    	}
    }
    et DepenseBeneficiaireId.java

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    @Embeddable
    public class DepenseBeneficiaireId implements Serializable
    {
    	public enum NatureDepense
    	{
    		REMUNERATION			("01", "REMUNERATION"),
    		FORMATION				("03", "FORMATION"),
    		REPAS					("07", "REPAS"),
    		HEBERGEMENTREPAS		("08", "HEBERGEMENT ET REPAS"),
    		TRANSPORT				("09", "TRANSPORT"),
    		DIVERS					("10", "DIVERS"),
    		REMUNERATIONHTT			("16", "REMUNERATION HTT"),
    		ALLOCATIONFORMATION		("17", "ALLOCATION FORMATION"),
    		LOCATIONSALLE			("18", "LOCATION SALLE"),
    		LOCATIONMATERIEL		("19", "LOCATION MATERIEL");
     
    		private String identifier;
    		private String libelle;
     
    		public String getIdentifier() {
    			return identifier;
    		}
    		public String getLibelle() {
    			return libelle;
    		}
     
    		private NatureDepense(String identifier, String libelle)
    		{
    			this.identifier = identifier;
    			this.libelle = libelle;
    		}
     
    		public static NatureDepense value(String identifier)
    		{
    			NatureDepense result = null;
    			for(NatureDepense natureDepense: values())
    			{
    				if(natureDepense.getIdentifier().equals(identifier))
    				{
    					result = natureDepense;
    					break;
    				}
    			}
    			return result;
    		}
    	}
     
     
    	private static final long serialVersionUID 		= -4762088849677965696L;
    	public static final String FIELD_BENEFICIAIRE	= "beneficiaire";
     
    	private Beneficiaire beneficiaire;
    	private NatureDepense depense_id;
     
     
    	@Type
    	(
    		type="fr.site.hibernate.utils.GenericEnumUserType",
    		parameters=
    		{
    			@Parameter(name="enumClassName", value="fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense"),
    			@Parameter(name="valueOfMethod", value="value")
    		}
    	)
    	public NatureDepense getDepense_id() {
    		return depense_id;
    	}
    	public void setDepense_id(NatureDepense depense_id) {
    		this.depense_id = depense_id;
    	}
    	@ManyToOne
    	public Beneficiaire getBeneficiaire() {
    		return beneficiaire;
    	}
    	public void setBeneficiaire(Beneficiaire beneficiaire) {
    		this.beneficiaire = beneficiaire;
    	}
     
     
    	@Override
    	public boolean equals(Object obj)
    	{
    		if(!(obj instanceof DepenseBeneficiaireId))
    			return false;
    		DepenseBeneficiaireId id = (DepenseBeneficiaireId)obj;
    		return
    			new EqualsBuilder()
    			.append(id.getBeneficiaire().getId(), getBeneficiaire().getId())
    			.append(id.getDepense_id().getIdentifier(), getDepense_id().getIdentifier())
    			.isEquals();
    	}
     
    	@Override
    	public int hashCode()
    	{
    		return
    			new HashCodeBuilder()
    			.append(getBeneficiaire().getId())
    			.append(getDepense_id().getIdentifier())
    			.toHashCode();
    	}
    }

    J'obtiens l'exception suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    java.lang.IllegalArgumentException: Unknown name value for enum class fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense: 16
    [...]
    Caused by: java.lang.IllegalArgumentException: No enum const class fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense.16


    Je vois bien qu'Hibernate essaie de charger la constante NatureDepense.16 qui n'existe pas, mais la fonction public static NatureDepense value(String identifier) devrait pallier � ce probl�me, non ? En tout cas, je sais qu'Hibernate passe dans cette fonction et trouve bien une NatureDepense matchant le String mis en param�tre.

    Je ne sais pas si c'est li� au fait que mon identifier soit de type String (je n'ai pas conserv� l'EnumType par d�faut), ou s'il me manque une annotation (j'ai essay� de mettre @Enumerated(EnumType.STRING), sans r�sultat), ou si je dois surcharger une m�thode dans mon enum : une id�e ?

  2. #2
    Membre Expert
    Inscrit en
    Ao�t 2009
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 1 073
    Par d�faut
    C'est curieux, apr�s avoir lu rapidement le code fourni, et celui que j'ai trouv� pour le GenericEnumUserType, j'ai l'impression qu'il devrait se passer le contraire : �a devrait trouver en base mais pas sauvegarder, vu qu'il manque le param�tre "identifierName" - par d�faut, �a sauvegarde sous l'attribut name(), donc ici pour la valeur "16" => "REMUNERATIONHTT".

    Maintenant, j'ai regard� vraiment rapidement ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut
    Mon enum utilise la classe ci-dessous pour se sauver et se recharger :

    http://desgeeksetdeslettres.com/blog...ister-les-enum

    J'utilise cette m�me classe pour d'autres enum de mon appli, par exemple :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    public enum Categorie
    	{
    		ADAPTATION	("1", "Adaptation"),
    		DEVELOPPEMENT	("2", "D�veloppement des comp�tences"),
    		NULLCATEGORIE	("0", "Cat�gorie � null");
    		
    		private String identifier;
    		private String libelle;
    		
    		public String getIdentifier() {
    			return identifier;
    		}
    		public String getLibelle() {
    			return libelle;
    		}
    		
    		private Categorie(String identifier, String libelle)
    		{
    			this.identifier = identifier;
    			this.libelle = libelle;
    		}
    		
    		public static Categorie value(String identifier)
    		{
    			Categorie result = null;
    			for(Categorie categorie: values())
    			{
    				if(categorie.getIdentifier().equals(identifier))
    				{
    					result = categorie;
    					break;
    				}
    			}
    			return result;
    		}
    	}
    
    
    --------------------------------------
    
    
    	@Column(name="categorie", length=3)
    	@Type
    	(
    		type="fr.site.hibernate.utils.GenericEnumUserType",
    		parameters=
    		{
    			@Parameter(name="enumClassName", value="fr.site.hibernate.classes.Stagiaire$Categorie"),
    			@Parameter(name="valueOfMethod", value="value")
    		}
    	)
    	public Categorie getCategorie() {
    		return categorie;
    	}
    	public void setCategorie(Categorie categorie) {
    		this.categorie = categorie;
    	}
    Mes Categorie se sauvegardent dans un char(3), et sont relues par Hibernate puis par Dojo, qui effectue correctement la conversion entre les identifiers et les labels � afficher sur ma page .jsp.


    Les NatureDepense sont les seules enum � bloquer lors de la relecture : est-ce parce qu'elles sont d�finies dans une classe et enregistr�es dans une autre ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut
    Pardon, j'ai oubli� de pr�ciser que j'avais chang� deux-trois d�tails dans la classe GenericEnumUserType, entre autres :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    private static final String DEFAULT_IDENTIFIER_METHOD_NAME = "getIdentifier";

    D'apr�s ma stacktrace, l'erreur se situe dans la fonction nullSafeGet de la classe GenericEnumUserType. Je teste avec :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException
    	{  
    		Object identifier = type.get(rs, names[0]);	
    		System.out.println("identifier = " + identifier.toString());
    Et je vois que pour toutes les enum, y compris NatureDepense, l'identifier est bien le String enregistr� en base.


    Mais si je bidouille avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if(identifier.equals((Object)new String("19"))) identifier = (Object)new String("FORMATION");
    je n'ai plus d'exception !

  5. #5
    Membre Expert
    Inscrit en
    Ao�t 2009
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 1 073
    Par d�faut
    Citation Envoy� par MNDev Voir le message
    Les NatureDepense sont les seules enum � bloquer lors de la relecture : est-ce parce qu'elles sont d�finies dans une classe et enregistr�es dans une autre ?
    Je pense que c'est bien de l� que vient le probl�me !

    Etant dans une autre classe, la m�thode "getIdentifier" ne doit pas renvoyer le bon type - a priori vu la stack trace, �a doit renvoyer DepenseBeneficiaireId$NatureDepense, au lieu de String. Et de l�, il ne sait pas faire le get sur "16".
    EDIT : Zut, lu trop vite, ce n'est pas cet endroit qui plante. Cela dit, �a doit �tre le m�me genre de souci.

    EDIT Bis : Est-ce que tu peux mettre un log dans NullSafeGet sur valueOfMethod.getName ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
    {
    	System.out.println("valueOfMethod.getName() = " + valueOfMethod.getName());
    	return valueOfMethod.invoke(enumClass, new Object[] { identifier });
    }
    catch (Exception e)
    {
    	throw new HibernateException("Exception while invoking valueOf method '" + valueOfMethod.getName() + "' of " + "enumeration class '" + enumClass + "'", e);
    }
    me renvoit valueOfMethod.getName() = value (pareil que pour les autres enums).

  7. #7
    Membre Expert
    Inscrit en
    Ao�t 2009
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 1 073
    Par d�faut
    Tu pourrais fournir la stacktrace compl�te de l'exception ? �a devient myst�rieux ...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut
    Stacktrace :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    java.lang.IllegalArgumentException: Unknown name value for enum class fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense: 19
    	at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:113)
    	at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:128)
    	at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
    	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2114)
    	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404)
    	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)
    	at org.hibernate.loader.Loader.getRow(Loader.java:1230)
    	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:724)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    	at org.hibernate.loader.Loader.loadCollection(Loader.java:2019)
    	at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:59)
    	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:587)
    	at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    	at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1744)
    	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:366)
    	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
    	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:131)
    	at org.hibernate.collection.PersistentSet.size(PersistentSet.java:162)
    	at fr.site.action.services.json.BeneficiairesAction.getBeneficiairesJson(BeneficiairesAction.java:82)
    	at fr.site.action.services.json.BeneficiairesAction.execute(BeneficiairesAction.java:107)
    	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.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
    	at com.googlecode.s2hibernate.struts2.plugin.s2hibernatevalidator.interceptor.HibernateValidator4Interceptor.intercept(HibernateValidator4Interceptor.java:85)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
    	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at fr.site.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:58)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:191)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    	at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:88)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:82)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    	at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.IllegalArgumentException: No enum const class fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense.19
    	at java.lang.Enum.valueOf(Enum.java:196)
    	at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:110)
    	... 101 more



    J'ai fait un quickfix pour mon appli :

    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
    public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException
    {  
    	Object identifier = type.get(rs, names[0]);
    	Object natureDepenseClassName = (Object)new String("fr.site.hibernate.classes.DepenseBeneficiaireId$NatureDepense");
    	if(enumClassName.equals(natureDepenseClassName)) {
    		for(NatureDepense natureDepense: NatureDepense.values())
    		{
    			if(natureDepense.getIdentifier().equals(identifier)) identifier = (Object)new String(natureDepense.toString());
    		}
    	}
     
    	if (rs.wasNull())
    	{
    		return null;
    	}
     
    	try
    	{
    		return valueOfMethod.invoke(enumClass, new Object[] { identifier });
    	}
    	catch (Exception e)
    	{
    		throw new HibernateException("Exception while invoking valueOf method '" + valueOfMethod.getName() + "' of " +
    			"enumeration class '" + enumClass + "'", e);
    	}
    }


    L'exception n'appara�t plus, mais je ne r�cup�re aucune DepenseBeneficiaire (depenses.size() = 0). J'enqu�te, mais je sens que c'est aussi li� � l'enum contenue dans une classe et sauv�e par l'autre...

  9. #9
    Membre Expert
    Inscrit en
    Ao�t 2009
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 1 073
    Par d�faut
    C'est curieux que la stacktrace n'indique pas ta classe custom mais org.hibernate.type.EnumType.

    En debug tu passes bien dans ta classe ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Par d�faut
    Je ne sais plus dans quel ordre �a se fait, mais je sais que :

    - je passe dans la m�thode nullSafeGet de la classe GenericEnumUserType, avec identifier qui contient 19, de type String, et
    - j'appelle la m�thode value de l'enum NatureDepense, et elle me renvoit l'objet de type NatureDepense correspondant � l'identifier 19.

    A noter que je passe 2 fois dans nullSafeGet pour l'identifier 19, et que l'exception appara�t uniquement pour la premi�re d�pense trouv�e en base (les autres sont ignor�es, du coup).



    J'ai r�solu mon probl�me, mais je laisse ce topic ouvert vu que l'origine du bug n'a pas encore �t� d�termin�e.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 16/09/2013, 14h10
  2. R�ponses: 6
    Dernier message: 18/04/2013, 13h19
  3. Probleme de persistance : java.lang.IllegalArgumentException: Unknown entity.
    Par silverfab34 dans le forum Persistance des donn�es
    R�ponses: 0
    Dernier message: 28/07/2011, 17h57
  4. R�ponses: 1
    Dernier message: 18/08/2010, 11h36
  5. R�ponses: 9
    Dernier message: 03/06/2007, 21h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo