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

Java EE Discussion :

Entity non mise à jour


Sujet :

Java EE

  1. #1
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut Entity non mise à jour
    Bonjour,

    j'ai un problème avec une entity qui ne veut pas se mettre à jour, alors que toutes les autres fonctionnent.

    Cette entity (RemoteEvent) hérite d'une autre entity (Event) et lui ajoute un lien vers une 3ème entity (RemoteNet).

    Voila les déclarations :

    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
     
     
    @Entity
    @EntityListeners({EventSupervisionListener.class})
    public class Event extends Exportable {
     
    @MappedSuperclass
    public abstract class Exportable implements Serializable, UUIDOwner {
     
    @Entity
    @EntityListeners({RemoteEventSupervisionListener.class})
    public class RemoteEvent extends Event implements RemoteEntity {
        @ManyToOne(optional=false, fetch = FetchType.EAGER, cascade ={CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
        private RemoteNet net;
     
     
    @Entity
    @EntityListeners({RemoteNetListener.class})
    public class RemoteNet extends Device  {

    Je peux mettre a jour un event de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Event event = em.find(Event.class, (long) 1);
    event.setInfo("New Info");
    Mais si je fais la même chose pour un remoteEvent cela ne fonctionnne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RemoteEvent remoteEvent = em.find(RemoteEvent.class, (long) 2);
    // Je récupère bien l'élément
    remoteEvent .setInfo("New Info");
    Et dans ce cas-ci le listener n'est jamais appelé. Si je regarde les attributs du remoteEvent, plusieurs variables sont ajoutées (par rapport a un event standard) :

    _persistence_primaryKey = (Long) #813
    _persistence_listener = (AttributeChangeListener) #1031
    _persistence_fetchGroup = () null
    _persistence_shouldRefreshFetchGroup = (boolean) false
    _persistence_session = () null
    Je me demande si les valeurs shouldRefreshFetchGroup ne devrait pas être a "true".

    J'ai aussi essayé de faire des modifications sur le RemoteNet et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RemoteEvent remoteEvent = em.find(RemoteEvent.class, (long) 2);
    RemoteNet net = remoteEvent.getRemoteNet();
    net.setInfo("Je fonctionne et change la valeur");

    Avez-vous une piste que je peux explorer ? La seule différence entre mon event et mon remoteEvent et l'ajout du "manyToOne" unidirectionnel.



    Le champ du RemoteNet est bien mise à jour. Il n'y a donc que mon RemoteEvent qui ne fonctionne pas.

    Merci de votre aide

  2. #2
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    J'ai simplifié le problème afin d'identifier l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @MappedSuperclass
    public abstract class Exportable implements Serializable, UUIDOwner {
     
    @Entity
    @EntityListeners({EventSupervisionListener.class})
    public class Event extends Exportable {
     
    @Entity
    public class RemoteEvent extends Event{
    // This entity do nothing except extend Event.

    Le RemoteEvent est entièrement vide et ne fait que l'extends d'Event.

    Si je modifie Event pas de problèmes. Si je modifie RemoteEvent cela ne fonctionne pas.


    J'ai identifié que le problème venait de la partie "json" de la méthode loadImageGroups. Si j'enlève cette partie l'update se fait.
    Il n'y a aucune exception levé, et les data sont absolument identique.

    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
     
    // CODE EVENT !
     
    @Lob
    private String images;
     
    @ExtJsSerialize
    private transient List<EventImageGroup> imageGroupList = new ArrayList<EventImageGroup>();
     
    @PreUpdate
    @PrePersist
    private void saveImageGroups() {
        JSONArray json = new JSONArray();
        for (EventImageGroup imgGroup : imageGroupList) {
            json.put(imgGroup.toJson());
        }
        images = json.toString();
    }
     
    @PostLoad
    private void loadImageGroups() {
        try 
        {
            imageGroupList.clear();
            // If i comment this instruction the code working fine. 
            // There are no exception rise.
            JSONArray json = new JSONArray(images);
            for (int i = 0; i < json.length(); ++i) { 
                imageGroupList.add(new EventImageGroup(json.getJSONObject(i)));
            }
        } 
        catch (JSONException ex) {
            Logger.getLogger(Event1.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    Une idée d'où peut venir le problème ?

Discussions similaires

  1. updateRow() : Données non mises à jour
    Par Neuromancien2 dans le forum JDBC
    Réponses: 5
    Dernier message: 23/10/2008, 00h02
  2. [JpGraph] image non mise à jour
    Par Lyna31 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2007, 16h07
  3. Réponses: 7
    Dernier message: 15/01/2007, 18h18
  4. Vue non mise à jour après modification d'une table
    Par cybernet35 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 13h54

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