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 :

Update en EJB-QL


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Update en EJB-QL
    Bonjour,

    J'utilise EJB3, netbeans 5.5, SJSAS 9.
    J'ai créé un entity bean dont voici l'extrait
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    @Table(name = "region")
    @NamedQueries( {
            @NamedQuery(name = "Region.findByRegid", query = "SELECT r FROM Region r WHERE r.regid = :regid"),
            @NamedQuery(name = "Region.findByRegnom", query = "SELECT r FROM Region r WHERE r.regnom = :regnom"),
            @NamedQuery(name = "Region1.modif", query = "UPDATE  Region1 AS  r SET r.zneid = :zneid  WHERE r.regid = :regid")
        })
    public class Region1 implements Serializable {
    ...
    Ces requêtes marchent très bien, mais je veux faire une modification de plusieurs champs par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @NamedQuery(name = "Region1.modif", query = "UPDATE  Region1 AS  r SET r.zneid = :zneid , r.regnom = :regnom WHERE r.regid = :regid")
    alors qu'il n'accepte pas les virgules.

    Est ce que quelqu'un a une idée?

    Merci d'avance pour votre préoccupation,
    Diamskel

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Pourquoi ne pas modifier directement les attributs de ton objet par ses setters, c'est nettement
    plus simple.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Merci fr1man.
    cet entity region est en relation (one to many) avec un autre entity zone, et donc il y a un entity de relation nommé regionPK contenant l'id de region et l'id de zone. De ce fait, si j'ajoute d'autres setters, il n'accepte pas lors de l'ajout.

    Mais je pense que je vais créer un autre entity region2 par exemple qui contiendra les setters dont j'aurai besoin pour la modification. Le hic dans tout ça est que je vais avoir beaucoup d'entity pour une seule table.

    Merci encore,
    Diamskel.

  4. #4
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    le fait que tu es un oneToMany n'empeche pas de faire un merge() sur ton entity

    moi, perso, je n'ai jamais fait de requete Update EJB-QL, persit/merge/remove... sont mes amis

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Update en EJB-QL
    Bonsoir,j'ai eu le même problème de modification en ejb-ql;

    TABLE REGION(regid,regnom,zneid);

    je fait comme suit dans la session bean pour faire la modification du table region dont l'Idf est regid :
    ..........
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                 Query query = em.createNamedQuery("Region.findByRegid");
                 query.setParameter("regid",regid);
                 List<Region> resultat = query.getResultList();
                 Iterator it = resultat.iterator();
     
                 this.region=(Region)it.next();
                 region.setRegnom(RegionNom);
                 region.getRegionPK().setZneid(ZoneId);
                 em.merge(region);
    ...............

    le problème est: quand je modifie à partir du formulaire de modification la libelle region seulement,c'est OK,
    par contre si je modifie zneid ,on a erreur,pas de modification de la zneid dans la table REGION(regid,regnom,zneid);

    Est-ce qu'il y a quelqu'un qui peut m'aider?
    Merci,
    Cordialement
    heriniain_a1

  6. #6
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    est-ce-que le oneToMany liée a Region sont en cascadeType.ALL ou cascadeType.MERGE ou rien ???

    quelle est l'erreur précise ?

    et montre nous tes Entities......

  7. #7
    Membre habitué Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Points : 178
    Points
    178
    Par défaut
    1- Tu fais un bulk update via une named-query avec comme critère la PK de l'objet => fr1man a raison , autant modifier directement les attributs de ton objet dans la transaction, c'est à çà que servent les EJB3.

    2- Pour faire un bulk update, je ne pense pas que tu doives utiliser le mot-clé AS.
    J'écrirais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Region1 r SET r.zneid = :zneid, r.regnom = :regnom WHERE r.regid = :regid
    Ce genre de requête marche chez moi, mais c'est pour modifier énormément de données en même temps. Dans mon cas c'est une réinit de statut d'objet, avec en même temps la mise à jour d'une date de modification.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut update en ejb-ql
    Bonjour,je vous remercie de votre reponse,voici donc mes entités(généré automatiquement par netbeans en utilisant "new entity class from database"):

    Entité region

    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
    108
    109
    110
    111
    112
    113
    /*
     * Region.java
     *
     * Created on 17 juillet 2007, 10:40
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package com.entity;
     
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
     
    @Entity
    @Table(name = "region")
    @NamedQueries( {
            @NamedQuery(name = "Region.findByRegid", query = "SELECT r FROM Region r WHERE r.regionPK.regid = :regid"),
            @NamedQuery(name = "Region.findByRegnom", query = "SELECT r FROM Region r WHERE r.regnom = :regnom"),
            @NamedQuery(name = "Region.findByZneid", query = "SELECT r FROM Region r WHERE r.regionPK.zneid = :zneid"),
            @NamedQuery(name = "Region.findAllregion", query = "SELECT r FROM Region r ORDER BY r.regionPK.regid")
     
     
        })
    public class Region implements Serializable {
     
        /**
         * EmbeddedId primary key field
         */
        @EmbeddedId
        protected RegionPK regionPK;
     
        @Column(name = "Reg_nom")
        private String regnom;
     
     
       @JoinColumn(name = "Zne_id", referencedColumnName = "Zne_id", insertable = false, updatable = false)
       @ManyToOne
        private Zone zone;
     
        /** Creates a new instance of Region */
        public Region() {
        }
     
        public Region(RegionPK regionPK) {
            this.regionPK = regionPK;
        }
     
     
        public Region(int zneid, int regid) {
            this.regionPK = new RegionPK(zneid, regid);
        }
     
        public RegionPK getRegionPK() {
            return this.regionPK;
        }
     
        public void setRegionPK(RegionPK regionPK) {
            this.regionPK = regionPK;
        }
     
     
        public String getRegnom() {
            return this.regnom;
        }
     
     
        public void setRegnom(String regnom) {
            this.regnom = regnom;
        }
     
     
        public Zone getZone() {
            return this.zone;
        }
     
     
        public void setZone(Zone zone) {
            this.zone = zone;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (this.regionPK != null ? this.regionPK.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Region)) {
                return false;
            }
            Region other = (Region)object;
            if (this.regionPK != other.regionPK && (this.regionPK == null || !this.regionPK.equals(other.regionPK))) return false;
            return true;
        }
     
        @Override
        public String toString() {
            return "com.entity.Region[regionPK=" + regionPK + "]";
        }
     
    }
    Entité zone


    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
    package com.entity;
     
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     * Entity class Zone
     * 
     * @author guest
     */
    @Entity
    @Table(name = "zone")
    @NamedQueries( {
            @NamedQuery(name = "Zone.findByZneid", query = "SELECT z FROM Zone z WHERE z.zneid = :zneid"),
            @NamedQuery(name = "Zone.findByZnenom", query = "SELECT z FROM Zone z WHERE z.znenom = :znenom"),
            @NamedQuery(name = "Zone.findAllzone", query = "SELECT z FROM Zone z")
     
        })
    public class Zone implements Serializable {
     
        @Id
        @Column(name = "Zne_id", nullable = false)
        private Integer zneid;
     
        @Column(name = "Zne_nom")
        private String znenom;
     
        /** Creates a new instance of Zone */
        public Zone() {
        }
     
     
        public Zone(Integer zneid) {
            this.zneid = zneid;
        }
     
     
        public Integer getZneid() {
            return this.zneid;
        }
     
     
        public void setZneid(Integer zneid) {
            this.zneid = zneid;
        }
     
     
        public String getZnenom() {
            return this.znenom;
        }
     
     
        public void setZnenom(String znenom) {
            this.znenom = znenom;
        }
     
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (this.zneid != null ? this.zneid.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
     
            if (!(object instanceof Zone)) {
                return false;
            }
            Zone other = (Zone)object;
            if (this.zneid != other.zneid && (this.zneid == null || !this.zneid.equals(other.zneid))) return false;
            return true;
        }
     
     
        @Override
        public String toString() {
            return "com.entity.Zone[zneid=" + zneid + "]";
        }
     
    }
    Entité regionPk



    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
    package com.entity;
     
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
     
     
    @Embeddable
    public class RegionPK implements Serializable {
     
        @Column(name = "Reg_id", nullable = false)
        private int regid;
     
        @Column(name = "Zne_id", nullable = false)
        private int zneid;
     
        /** Creates a new instance of RegionPK */
        public RegionPK() {
        }
     
     
        public RegionPK(int zneid, int regid) {
            this.zneid = zneid;
            this.regid = regid;
        }
     
        public int getRegid() {
            return this.regid;
        }
     
     
        public void setRegid(int regid) {
            this.regid = regid;
        }
     
     
        public int getZneid() {
            return this.zneid;
        }
     
     
        public void setZneid(int zneid) {
            this.zneid = zneid;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (int)zneid;
            hash += (int)regid;
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
     
            if (!(object instanceof RegionPK)) {
                return false;
            }
            RegionPK other = (RegionPK)object;
            if (this.zneid != other.zneid) return false;
            if (this.regid != other.regid) return false;
            return true;
        }
     
     
        @Override
        public String toString() {
            return "com.entity.RegionPK[zneid=" + zneid + ", regid=" + regid + "]";
        }
     
    }


    L'erreur est quand je modifie seulement la libelle region, il y a modification dans la base,je veut remplacer par exemple une zneid de valeur 1 à un autre valeur par exemple 2,il n'y a pas modification dans la table region.

    En suite j'ai essayé avec

    UPDATE Region r SET r.regionPK.zneid = :zneid,r.regnom = :regnom WHERE r.regid = :regid" dans l'entité region et on a l'erreur suivante si je fait le deploiement :

    Deploying application in domain failed; Deployment Error --
    Exception Description: Syntax error parsing the query [UPDATE Region r SET r.regionPK.zneid = :zneid,r.regnom = :regnom WHERE r.regid = :regid] at [.].
    C:\projet-ejb\nbproject\build-impl.xml:325: Deployment error:
    The module has not been deployed.


    je vous remercie encore,

    Cordialement heriniain_a1

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 12h40
  2. Problème avec UPDATE EJB + JSF
    Par GeantBioHazard dans le forum JSF
    Réponses: 8
    Dernier message: 19/02/2008, 14h34
  3. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 12h59
  4. Réponses: 3
    Dernier message: 10/11/2002, 12h03
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 15h40

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