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 :

Mapper un Map sous Hibernate [Mapping]


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Par défaut Mapper un Map sous Hibernate
    Bonjour,
    Je suis sur hibernate depuis un moment pour une appli. Avant j'utilisais un Set<Competence>, mais je dois passer à un Map<Competence,Integer>.

    J'ai regardé sur pas mal de sites, mais les réponses ne corrigent pas l'erreur.
    Voici l'exception levée :

    Edit : avec le code c'est mieux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        @ElementCollection(targetClass=Competence.class,fetch=FetchType.EAGER)
        @MapKey(name="id")
        @ManyToMany(targetEntity = Competence.class, cascade = {
            CascadeType.PERSIST, CascadeType.MERGE })
        private Map<Competence,Integer> competences = new HashMap<Competence,Integer>();
    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
     
    java.lang.IllegalArgumentException: Can not set java.lang.Long field com.zenika.kbzen.domain.AbstractEntity.id to java.lang.Integer
         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
         at java.lang.reflect.Field.get(Field.java:358)
         at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
         at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:227)
         at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3875)
         at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3583)
         at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:203)
         at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
         at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
         at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:121)
         at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:815)
         at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1203)
         at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:188)
         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
         at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
         at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:467)
         at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
         at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
         at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
         at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
         at $Proxy39.persist(Unknown Source)
         at com.zenika.kbzen.service.support.GenericEntityServiceImpl.insert(GenericEntityServiceImpl.java:41)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
         at $Proxy40.insert(Unknown Source)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:416)
         at org.apache.wicket.proxy.$Proxy29.insert(Unknown Source)
         at com.zenika.kbzen.pages.HomePage$1.onClick(HomePage.java:72)
         at org.apache.wicket.markup.html.link.Link.onLinkClicked(Link.java:188)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:211)
         at org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:192)
         at org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:173)
         at org.apache.wicket.request.RequestHandlerStack.executeRequestHandler(RequestHandlerStack.java:84)
         at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:206)
         at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:248)
         at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:131)
         at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:184)
         at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
         at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
         at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
         at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
         at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
         at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
         at org.mortbay.jetty.Server.handle(Server.java:322)
         at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
         at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
         at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
         at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
    Pourriez-vous m'expliquer d'où elle vient? Étant novice en hibernate, je pense qu'il cherche à créer une clé pour l'Integer mais j'en suis pas sur...
    Je vous remercie par avance pour vos réponses.

  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
    Qu'est-ce que tu cherches à mapper exactement ? Quel est ton modèle de données ?

    Et accessoirement, un peu plus de code (par exemple sur la classe Competence) ne ferait pas de mal

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Par défaut
    Ce que je cherche à faire c'est avoir un ensemble de couples competence-note pour une personne donnée

    Voici le code de ma classe Competence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Entity
    @Embeddable
    public class Competence extends AbstractEntity implements
    		Comparable<Competence> {
    	private String nom;
    	private String description;
     
    	private boolean disponible = false;
     
    	@Fetch(value = FetchMode.JOIN)
    	@ElementCollection (targetClass = java.lang.String.class, fetch= FetchType.EAGER)
    	private Set<String> motCles = new TreeSet<String>();

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Par défaut
    Problème résolut
    Voici la solution au cas ou quelqu'un fasse la même erreur:

    @ElementCollection(targetClass=Competence.class,fetch=FetchType.EAGER)

    => @ElementCollection(fetch=FetchType.EAGER)

    On enlève targetClass, sinon il semble qu'il recherche deux objets de type Compétence dans la map, donc ça pose problème

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut
    Bonjour,

    je travaille actuellement sur un problème similaire (ou enfin il me semble), pourrais tu détaillé ton modèle et ta base pour présenter la partie personne / compétence / note.

    Cela pourrait me dépanner (et peut être d'autres par la suite).

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de lecture Sous Hibernate
    Par Invité dans le forum Hibernate
    Réponses: 11
    Dernier message: 24/03/2010, 11h16
  2. Hibernate Mapping Sous Eclipse
    Par Amanar dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2009, 22h46
  3. Ok sous SQL, pas ok sous Hibernate
    Par Kzeon dans le forum Hibernate
    Réponses: 7
    Dernier message: 21/07/2006, 01h24
  4. createblob sous hibernate
    Par zizou771 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/05/2006, 14h38
  5. Map sous Firefox
    Par amika dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/02/2006, 17h45

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