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

GWT et Vaadin Java Discussion :

Mise à jour de données impossible : java.lang.IllegalArgumentException: Unknown entity:


Sujet :

GWT et Vaadin Java

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Par défaut Mise à jour de données impossible : java.lang.IllegalArgumentException: Unknown entity:
    Bonjour à tous,

    J'ai un souci à l'utilisation d'un éditeur de données de base de données en GWT :

    En fait, j'essaye d'éditer un objet Message qui a une relation par clé étrangère vers l'objet MessageType.
    MessageType est un référentiel de valeurs.
    Message est une instance de l'objet avec plusieurs données propres (nom, description, etc...)
    Ce que je souhaite faire est de pouvoir modifier cette relation au niveau du Message.

    Lorsque je crée le message avec ma relation, tout se passe sans problème.

    Lorsque je souhaite modifier l'objet Message, j'obtiens le message d'erreur suivant :
    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
     
    28 mars 2013 19:21:49 com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost
    GRAVE: Unexpected error
    java.lang.IllegalArgumentException: Unknown entity: com.cacf.iaf.server.domain.MessageType_$$_javassist_13
    	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:793)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:756)
    	at com.cacf.iaf.server.locator.EntityLocator.find(EntityLocator.java:28)
    	at com.cacf.iaf.server.locator.EntityLocator.find(EntityLocator.java:14)
    	at com.google.web.bindery.requestfactory.shared.Locator.isLive(Locator.java:96)
    	at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.doIsLive(LocatorServiceLayer.java:188)
    	at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.isLive(LocatorServiceLayer.java:85)
    	at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.isLive(ServiceLayerDecorator.java:116)
    	at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.isLive(ServiceLayerDecorator.java:116)
    	at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.createReturnOperations(SimpleRequestProcessor.java:274)
    	at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:232)
    	at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:127)
    	at com.google.web.bindery.requestfactory.server.RequestFactoryServlet.doPost(RequestFactoryServlet.java:133)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
    	at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
    	at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
    	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
    	at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:89)
    	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
    	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
    	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
    	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:324)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    Caused by: org.hibernate.MappingException: Unknown entity: com.cacf.iaf.server.domain.MessageType_$$_javassist_13
    	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693)
    	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:92)
    	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)
    	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1005)
    	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:998)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
    Pour cela j'ai défini mes deux entités :
    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
     
    @Entity
    @Table(name = "Message")
    public class Message extends EntityBase {
    	private static final long serialVersionUID = 1L;
     
    	@Column(name = "description", unique = false, nullable = true, length = 100)
    	private String description;
     
    	@Column(name = "used")
    	private Boolean used;
     
    	@Column(name = "wavFile", unique = false, nullable = true, length = 20)
    	private String wavFile;
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name = "type", referencedColumnName = "id")
    	private MessageType messageType;
     
    	@OneToMany(targetEntity = Dnis.class, fetch = FetchType.LAZY, mappedBy = "flashMsg")
    	private List<Dnis> dnis;
     
    	public Message() {
    		super();
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
    	public Boolean isUsed() {
    		return used;
    	}
     
    	public void setUsed(Boolean used) {
    		this.used = used;
    	}
     
    	public String getWavFile() {
    		return wavFile;
    	}
     
    	public void setWavFile(String wavFile) {
    		this.wavFile = wavFile;
    	}
     
    	public void setMessageType(MessageType messageType) {
    		this.messageType = messageType;
    	}
     
    	public MessageType getMessageType() {
    		return messageType;
    	}
     
    	public void setDnis(List<Dnis> dnis) {
    		this.dnis = dnis;
    	}
     
    	public List<Dnis> getDnis() {
    		return dnis;
    	}
     
    	@Override
    	public boolean equals(Object o) {
    		if (!(o instanceof Message)) {
    			return false;
    		}
    		return id.longValue() == ((Message) o).id.longValue();
    	}
     
    	@Override
    	public int hashCode() {
    		return new StringBuilder().append(id).append(description).toString().hashCode();
    	}
     
    	@Override
    	public String toString() {
    		return "Message [id=" + id + ", description=" + description + "]";
    	}
    }
    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
     
    @Entity
    @Table(name = "MessageType")
    public class MessageType extends EntityBase {
    	private static final long serialVersionUID = 1L;
     
    	@Column(name = "name", unique = false, nullable = false, length = 30)
    	private String name;
     
    	@OneToMany(targetEntity = Message.class, fetch = FetchType.LAZY, mappedBy = "messageType")
    	private List<Message> message;
     
    	public MessageType() {
    		super();
    	}
     
    	public String getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    	public void setMessage(List<Message> message) {
    		this.message = message;
    	}
     
    	public List<Message> getMessage() {
    		return message;
    	}
     
    	@Override
    	public boolean equals(Object o) {
    		if (!(o instanceof MessageType)) {
    			return false;
    		}
    		return id.longValue() == ((MessageType) o).id.longValue();
    	}
     
    	@Override
    	public int hashCode() {
    		return new StringBuilder().append(id).append(name).toString().hashCode();
    	}
     
    	@Override
    	public String toString() {
    		return "MessageType [id=" + id + ", name=" + name + "]";
    	}
    }
    Dans la DAO de message, j'ai deux méthodes (getAll et persist) :
    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
     
    public class MessageDao {
    	@Inject
    	Provider<EntityManager> emProvider;
     
     
    	@Transactional
    	public List<Message> getAll(){
    		CriteriaBuilder cb = emProvider.get().getCriteriaBuilder();
    		CriteriaQuery<Message> c = cb.createQuery(Message.class);
    		Root<Message> r = c.from(Message.class);
     
    		Fetch<Message,MessageType> type = r.fetch("messageType", JoinType.LEFT);
     
    		c.select(r);
    		TypedQuery<Message> q = emProvider.get().createQuery(c);
     
    		return q.getResultList();
    	}
     
    	@Transactional
    	public void persist(Message entity) {
    		emProvider.get().persist(entity);
    	}
    }
    Coté Client, j'ai créé mes deux Proxy + Mon service :
    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
     
    @ProxyFor(value = Message.class, locator = EntityLocator.class)
    public interface MessageProxy extends EntityProxy {
    	public Long getId();
     
    	public String getDescription();
     
    	public void setDescription(String description);
     
    	public Boolean isUsed();
     
    	public void setUsed(Boolean used);
     
    	public String getWavFile();
     
    	public void setWavFile(String wavFile);
     
    	public MessageTypeProxy getMessageType();
     
    	public void setMessageType(MessageTypeProxy messageType);
     
    	public List<DnisProxy> getDnis();
     
    	public void setDnis(List<DnisProxy> dnis);
     
    	@Override
    	EntityProxyId<MessageProxy> stableId();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @ProxyFor(value = MessageType.class, locator = EntityLocator.class)
    public interface MessageTypeProxy extends EntityProxy {
    	public Long getId();
     
    	public String getName();
     
    	public void setName(String name);
     
    	public List<MessageProxy> getMessage();
     
    	public void setMessage(List<MessageProxy> message);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Service(value = MessageDao.class, locator = InjectingServiceLocator.class)
    public interface MessageService extends RequestContext {
     
    	Request<List<MessageProxy>> getAll();
     
    	Request<Void> persist(MessageProxy message);
     
    }
    Et voici ma manière d'appeler mes deux méthodes côté client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public void addMessage(RequestContext context, MessageProxy message) {
    		MessageService service = (MessageService)context;
    		service.persist(message).getRequestContext().fire();
    		}
     
    		public void getMessages(){
    		requestFactory.messageService().getAll().with("messageType").fire(new Receiver<List<MessageProxy>>(){
    			@Override
    			public void onSuccess(List<MessageProxy> response) {
    				messageWidget.setMessageStore(response);
    			}	
    		});
    		}
    Quelqu'un voit il d'où peut provenir cette erreur ?

    Merci par avance pour vos pistes, aides...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    A priori il ne reconnait pas ton entité MessageType.
    Est-ce que tu l'as incluse dans le descripteur de module (ton fichier .gwt.xml) ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Par défaut
    J'ai le même problème que tom_nicolas.
    J'ai trouvé une solution ici mais j'ai beau l'appliquer, rien n'y fait. On ne reconnait toujours pas mes entities.

    Y aurait-il quelque chose à ajouter?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Montre-nous ton descripteur de module (ton fichier .gwt.xml) !

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Par défaut
    Pour la partie ejb, j'ai le fichier EjbDomainGWT.gwt.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
     
    <module>
        <source path="entities" />
    </module>
    et pour la partie war :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
     
    <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
     
    <module>
        <inherits name="com.google.gwt.user.User"/>
     
        <inherits name="org.aflog.aidejuridique.EjbDomainGWT"/>
     
        <inherits name="com.google.gwt.user.theme.chrome.Chrome"/> 
     
        <entry-point class="org.yournamehere.client.MainEntryPoint"/>
    </module>

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    ça paraît correct, tes entités sont-elles bien contenues dans le package org.aflog.aidejuridique.entities ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Par défaut
    Mon projet est construit ainsi et mes entités sont bien dans le package org.aflog.aidejuridique.entities
    Images attachées Images attachées  

Discussions similaires

  1. 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
  2. Réponses: 9
    Dernier message: 10/12/2010, 13h55
  3. mise a jour des données impossible avec soapconnection
    Par amireve dans le forum Web & réseau
    Réponses: 10
    Dernier message: 04/02/2010, 19h28
  4. Mise à Jour des Données impossible
    Par boby15000 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 08/01/2009, 11h57
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24

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