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 :

HQL et suppression


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut HQL et suppression
    Bonjour,
    Désolée de vous déranger mais je cherche à supprimer des éléments d'une table en fonction d'un critère passé en paramètre.

    J'ai 3 tables "compteur", "perssemainecompt", et "semaine".
    Dans la tables perssemainecompt, j'ai un attribut "idCompteur" et un attribut "idSemaine" (ces 2 attributs sont des clés étrangères qui sont les clés primaires des tables "semaine" et "compteur")
    En sql, j'obtiens le résultat que je veux grace à cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete compteur from compteur,  perssemainecompt where compteur.idCompteur = perssemainecompt.idCompteur and perssemainecompt.idSemaine = 564
    En HQL, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void removeCompteurByIdSemaine(Integer IdSemaine) {
    		String queryString = "delete compteur from Compteur as compteur, Perssemainecompt as  perssemainecompt where "
    				+" compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId";
    		this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(queryString).setInteger("oldSemaineId", IdSemaine).executeUpdate();
    		System.out.println("suppression Compteur ! ! ");
     
    	}
    Et j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unexpected token: from near line 1, column 17 [delete compteur from com.maison.enfant.gestion.horaire.entitybeans.Compteur as compteur, com.maison.enfant.gestion.horaire.entitybeans.Perssemainecompt as perssemainecompt where compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId]
    Et je ne vois pas pourquoi ... u_u

    Merci de votre aide

  2. #2
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Vraiment désolée de vous déranger avec çà et d'insister mais je suis bloquée. Je ne pensais pas que ce serait aussi compliqué de supprimer des données en hql avec la présence de jointure (à la différence du sql)

    J'ai continué à faire des recherches et j'ai trouvé dans ce lien que je ne comprend pas vraiment u_u

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Aucune jointure (implicite ou explicite) ne peut être spécifiée dans une requête HQL. Les sous-requêtes peuvent être utilisées dans la clause where ; les sous-requêtes, elles-mêmes, peuvent contenir des jointures.
    Il serait donc possible de faire des sous requete pour supprimer mais comment puis je le faire u_u


    pour rappel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Transactional
    	public void removeCompteurByIdSemaine(Integer IdSemaine) {
    		String queryString = "delete compteur from Compteur as compteur, Perssemainecompt as  perssemainecompt where "
    				+" compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId";
    		this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(queryString).setInteger("oldSemaineId", IdSemaine).executeUpdate();
    		System.out.println("suppression Compteur ! ! ");
     
    	}

    Merci de vos réponses et d'avoir pris le temps de lire mon message

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,
    Essaies de corriger déjà ton HQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String queryString = "delete from Compteur compteur, Perssemainecompt  perssemainecompt where "
    				+" compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId";
    Même si ça marche, personnellement je pense que t'as un souci dans ton mapping, ou dans la définition des jointures JPA entre les entités,tu réfléchis toujours beaucoup en SQL natif et non requête HQL. Normalement sauf cas très exceptionnel une requête HQL doit toujours partir d'une seule entité , et faire une navigation à la UML pour atteindre les attributs d'autres objets avec lesquels cette entité principale est en relation (OneToMany, OneToOne, etc...). Mais bon je crois t'avoir déjà fait cette remarque dans un autre post.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  4. #4
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Effectivement, tu m'en as parlé dans un autre post et c'est pourquoi, j'ai demandé à suivre une formation dans ce domaine. Mais je ne pourrais la suivre qu'en février 2013

    Mais en attendant je suis en galère.
    C'est pourquoi, je tiens à te remercier de ton aide.
    J'ai essayé de faire comme tu me l'as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    String queryString = "delete from Compteur compteur, Perssemainecompt  perssemainecompt where "
    				+" compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId";
    Mais j'obtiens un autre message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    node to traverse cannot be null!

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Peut on voir le code de l'entité Compteur, Semaine et PersSemaine?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  6. #6
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup de votre aide

    Compteur.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
     
    package com.maison.enfant.gestion.horaire.entitybeans;
     
    // default package
    // Generated 8 juil. 2012 18:26:09 by Hibernate Tools 3.4.0.CR1
     
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
     
    /**
     * Compteur generated by hbm2java
     */
    @Entity
    @Table(name = "compteur", catalog = "gestionhoraire")
    public class Compteur implements java.io.Serializable {
     
    	private Integer idCompteur;
    	private String horaireAfaire;
    	private String horaireFaite;
    	private String observation;
    	private Set<Perssemainecompt> perssemainecompts = new HashSet<Perssemainecompt>(
    			0);
     
    	public Compteur() {
    	}
     
    	public Compteur(String horaireAfaire, String horaireFaite) {
    		this.horaireAfaire = horaireAfaire;
    		this.horaireFaite = horaireFaite;
    	}
     
    	public Compteur(String horaireAfaire, String horaireFaite,
    			String observation, Set<Perssemainecompt> perssemainecompts) {
    		this.horaireAfaire = horaireAfaire;
    		this.horaireFaite = horaireFaite;
    		this.observation = observation;
    		this.perssemainecompts = perssemainecompts;
    	}
     
    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "idCompteur", unique = true, nullable = false)
    	public Integer getIdCompteur() {
    		return this.idCompteur;
    	}
     
    	public void setIdCompteur(Integer idCompteur) {
    		this.idCompteur = idCompteur;
    	}
     
    	@Column(name = "horaireAfaire", nullable = false, length = 5)
    	public String getHoraireAfaire() {
    		return this.horaireAfaire;
    	}
     
    	public void setHoraireAfaire(String horaireAfaire) {
    		this.horaireAfaire = horaireAfaire;
    	}
     
    	@Column(name = "horaireFaite", nullable = false, length = 5)
    	public String getHoraireFaite() {
    		return this.horaireFaite;
    	}
     
    	public void setHoraireFaite(String horaireFaite) {
    		this.horaireFaite = horaireFaite;
    	}
     
    	@Column(name = "observation")
    	public String getObservation() {
    		return this.observation;
    	}
     
    	public void setObservation(String observation) {
    		this.observation = observation;
    	}
     
    	@OneToMany(fetch = FetchType.LAZY, mappedBy = "compteur")
    	public Set<Perssemainecompt> getPerssemainecompts() {
    		return this.perssemainecompts;
    	}
     
    	public void setPerssemainecompts(Set<Perssemainecompt> perssemainecompts) {
    		this.perssemainecompts = perssemainecompts;
    	}
     
    }
    Perssemainecompt.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
     
    package com.maison.enfant.gestion.horaire.entitybeans;
     
    // default package
    // Generated 8 juil. 2012 18:26:09 by Hibernate Tools 3.4.0.CR1
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
     
    /**
     * Perssemainecompt generated by hbm2java
     */
    @Entity
    @Table(name = "perssemainecompt", catalog = "gestionhoraire")
    public class Perssemainecompt implements java.io.Serializable {
     
    	private Integer idPersSemaineCompt;
    	private Compteur compteur;
    	private Semaine semaine;
    	private Personne personne;
    	private Jour jour;
     
    	public Perssemainecompt() {
    	}
     
    	public Perssemainecompt(Compteur compteur, Semaine semaine,
    			Personne personne, Jour jour) {
    		this.compteur = compteur;
    		this.semaine = semaine;
    		this.personne = personne;
    		this.jour = jour;
    	}
     
    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "idPersSemaineCompt", unique = true, nullable = false)
    	public Integer getIdPersSemaineCompt() {
    		return this.idPersSemaineCompt;
    	}
     
    	public void setIdPersSemaineCompt(Integer idPersSemaineCompt) {
    		this.idPersSemaineCompt = idPersSemaineCompt;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "idCompteur", nullable = false)
    	public Compteur getCompteur() {
    		return this.compteur;
    	}
     
    	public void setCompteur(Compteur compteur) {
    		this.compteur = compteur;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "idSemaine", nullable = false)
    	public Semaine getSemaine() {
    		return this.semaine;
    	}
     
    	public void setSemaine(Semaine semaine) {
    		this.semaine = semaine;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "idPersonne", nullable = false)
    	public Personne getPersonne() {
    		return this.personne;
    	}
     
    	public void setPersonne(Personne personne) {
    		this.personne = personne;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "idJour", nullable = false)
    	public Jour getJour() {
    		return this.jour;
    	}
     
    	public void setJour(Jour jour) {
    		this.jour = jour;
    	}
     
    }
    Semaine.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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
     
    package com.maison.enfant.gestion.horaire.entitybeans;
     
    // default package
    // Generated 4 nov. 2012 14:02:37 by Hibernate Tools 3.4.0.CR1
     
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
     
    /**
     * Semaine generated by hbm2java
     */
    @Entity
    @Table(name = "semaine", catalog = "gestionhoraire")
    public class Semaine implements java.io.Serializable {
     
    	private Integer idSemaine;
    	private Integer numeroSemaine;
    	private String roulementSem;
    	private Date dateModif;
    	private Date dateDebutSem;
    	private Date dateFinSem;
    	private String type;
    	private int idRoulementSem;
    	private String nomUnite;
    	private Integer idUnite;
    	private Set<Perssemainecompt> perssemainecompts = new HashSet<Perssemainecompt>(
    			0);
    	private Set<Jour> jours = new HashSet<Jour>(0);
     
    	public Semaine() {
    	}
     
    	public Semaine(Date dateModif, String type, int idRoulementSem,
    			String nomUnite, int idUnite) {
    		this.dateModif = dateModif;
    		this.type = type;
    		this.idRoulementSem = idRoulementSem;
    		this.nomUnite = nomUnite;
    		this.idUnite = idUnite;
    	}
     
    	public Semaine(Integer numeroSemaine, String roulementSem, Date dateModif,
    			Date dateDebutSem, Date dateFinSem, String type,
    			int idRoulementSem, String nomUnite, int idUnite,
    			Set<Perssemainecompt> perssemainecompts, Set<Jour> jours) {
    		this.numeroSemaine = numeroSemaine;
    		this.roulementSem = roulementSem;
    		this.dateModif = dateModif;
    		this.dateDebutSem = dateDebutSem;
    		this.dateFinSem = dateFinSem;
    		this.type = type;
    		this.idRoulementSem = idRoulementSem;
    		this.nomUnite = nomUnite;
    		this.idUnite = idUnite;
    		this.perssemainecompts = perssemainecompts;
    		this.jours = jours;
    	}
     
    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "idSemaine", unique = true, nullable = false)
    	public Integer getIdSemaine() {
    		return this.idSemaine;
    	}
     
    	public void setIdSemaine(Integer idSemaine) {
    		this.idSemaine = idSemaine;
    	}
     
    	@Column(name = "numeroSemaine")
    	public Integer getNumeroSemaine() {
    		return this.numeroSemaine;
    	}
     
    	public void setNumeroSemaine(Integer numeroSemaine) {
    		this.numeroSemaine = numeroSemaine;
    	}
     
    	@Column(name = "roulementSem", length = 10)
    	public String getRoulementSem() {
    		return this.roulementSem;
    	}
     
    	public void setRoulementSem(String roulementSem) {
    		this.roulementSem = roulementSem;
    	}
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "dateModif", nullable = false, length = 10)
    	public Date getDateModif() {
    		return this.dateModif;
    	}
     
    	public void setDateModif(Date dateModif) {
    		this.dateModif = dateModif;
    	}
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "dateDebutSem", length = 10)
    	public Date getDateDebutSem() {
    		return this.dateDebutSem;
    	}
     
    	public void setDateDebutSem(Date dateDebutSem) {
    		this.dateDebutSem = dateDebutSem;
    	}
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "dateFinSem", length = 10)
    	public Date getDateFinSem() {
    		return this.dateFinSem;
    	}
     
    	public void setDateFinSem(Date dateFinSem) {
    		this.dateFinSem = dateFinSem;
    	}
     
    	@Column(name = "type", nullable = false, length = 45)
    	public String getType() {
    		return this.type;
    	}
     
    	public void setType(String type) {
    		this.type = type;
    	}
     
    	@Column(name = "idRoulementSem", nullable = false)
    	public int getIdRoulementSem() {
    		return this.idRoulementSem;
    	}
     
    	public void setIdRoulementSem(int idRoulementSem) {
    		this.idRoulementSem = idRoulementSem;
    	}
     
    	@Column(name = "nomUnite", nullable = false, length = 50)
    	public String getNomUnite() {
    		return this.nomUnite;
    	}
     
    	public void setNomUnite(String nomUnite) {
    		this.nomUnite = nomUnite;
    	}
     
    	@Column(name = "idUnite", nullable = false)
    	public int getIdUnite() {
    		return this.idUnite;
    	}
     
    	public void setIdUnite(int idUnite) {
    		this.idUnite = idUnite;
    	}
     
    	@OneToMany(fetch = FetchType.LAZY, mappedBy = "semaine")
    	public Set<Perssemainecompt> getPerssemainecompts() {
    		return this.perssemainecompts;
    	}
     
    	public void setPerssemainecompts(Set<Perssemainecompt> perssemainecompts) {
    		this.perssemainecompts = perssemainecompts;
    	}
     
    	@OneToMany(fetch = FetchType.LAZY, mappedBy = "semaine")
    	public Set<Jour> getJours() {
    		return this.jours;
    	}
     
    	public void setJours(Set<Jour> jours) {
    		this.jours = jours;
    	}
     
    }

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String queryString = "delete from Compteur compteur join fetch compteur.perssemainecompts psc where psc.semaine.idSemaine = :oldSemaineId";
    Et regarde bien la navigation qui a été faite, et essaies de t'en inspirer
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  8. #8
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup pour ton aide . J'ai encore du mal avec le
    çà me fait tout bizarre

    Par contre, j'ai toujours le même problème et le même message d'erreur
    Voici la méthode que j'utilise :
    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
     
    @Transactional
    	public void removeCompteurByIdSemaine(Integer IdSemaine) {
     
    		System.out.println("queryString  ");
     
    		String queryString = "delete from Compteur compteur join fetch compteur.perssemainecompts psc where psc.semaine.idSemaine = :oldSemaineId";
     
    		System.out.println("queryString 2   "+queryString);
     
    		//String queryString = "delete compteur from Compteur as compteur, Perssemainecompt as  perssemainecompt where "
    		//		+" compteur.idCompteur = perssemainecompt.compteur.idCompteur and perssemainecompt.semaine.idSemaine = :oldSemaineId";
    		this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(queryString).setInteger("oldSemaineId", IdSemaine).executeUpdate();
    		System.out.println("suppression Compteur ! ! ");
     
    	}
    J'ai le même message d'erreur que j'essaie de supprimer un seul compteur ou une liste de compteur.

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonsoir,
    Voici un lien que je t'invite à lire vivement.
    Peut on voir en outre le SQL généré par Hibernate et la stack trace complète de l'erreur?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  10. #10
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup pour le lien

    voici l'erreur que j'ai :
    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
     
    Messages: 	
    node to traverse cannot be null!
    File: 	org/hibernate/hql/ast/util/NodeTraverser.java
    Line number: 	55
     
     
     
    Stacktraces
    java.lang.IllegalArgumentException: node to traverse cannot be null!
     
        org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:55)
        org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:277)
        org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
        org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
        org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
        org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
        org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
        org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
        org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
        org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
        com.maison.enfant.gestion.horaire.dao.impl.CompteurDaoImpl.removeCompteurByIdSemaine(CompteurDaoImpl.java:39)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)
        org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        $Proxy19.removeCompteurByIdSemaine(Unknown Source)
        com.maison.enfant.gestion.horaire.service.impl.CompteurImpl.removeCompteurByIdSemaine(CompteurImpl.java:59)
        com.maison.enfant.gestion.horaire.service.impl.SemaineImpl.removeSemaine(SemaineImpl.java:193)
        com.maison.enfant.gestion.horaire.action.planning.PlanningAction.deleteValues(PlanningAction.java:287)
        com.maison.enfant.gestion.horaire.action.planning.PlanningAction.save(PlanningAction.java:303)
    Et en faisant un system.out.print de la query j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    queryString 2   delete from Compteur compteur join fetch compteur.perssemainecompts psc where psc.semaine.idSemaine = :oldSemaineId

  11. #11
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour, en fait je parlais de la requête générée par hibernate, celle qui va être soumise à ton SGBD, tu la vois dans les traces Hibernate,vois tu de quoi je parle? Pour ta requête, modifies là un peu ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryString = "delete from Compteur compteur join compteur.perssemainecompts psc where psc.semaine is not null and psc.semaine.idSemaine = :oldSemaineId";
    J'ai enlévé le fetch,y'en avait pas besoin, et je t'ai mis une clause not null.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  12. #12
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup de ton aide

    Est de cela dont tu as besoin ?
    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
     
    je suis dans getListPersSemaineComptByIdSemaine 
    Hibernate: select this_.idCompteur as idCompteur1_0_, this_.horaireAfaire as horaireA2_1_0_, this_.horaireFaite as horaireF3_1_0_, this_.observation as observat4_1_0_ from gestionhoraire.compteur this_ where this_.idCompteur=?
    Hibernate: select this_.idPersonne as idPersonne5_0_, this_.idDroit as idDroit5_0_, this_.idFonction as idFonction5_0_, this_.horaireContrat as horaireC2_5_0_, this_.nom as nom5_0_, this_.prenom as prenom5_0_, this_.idService as idService5_0_, this_.idUser as idUser5_0_ from gestionhoraire.personne this_ where this_.idPersonne=?
    Hibernate: select this_.idPersonne as idPersonne5_0_, this_.idDroit as idDroit5_0_, this_.idFonction as idFonction5_0_, this_.horaireContrat as horaireC2_5_0_, this_.nom as nom5_0_, this_.prenom as prenom5_0_, this_.idService as idService5_0_, this_.idUser as idUser5_0_ from gestionhoraire.personne this_ where this_.idPersonne=?
    Hibernate: select this_.idFonction as idFonction3_0_, this_.descFonction as descFonc2_3_0_ from gestionhoraire.fonction this_ where this_.idFonction=?
    Hibernate: select this_.idPersonne as idPersonne5_0_, this_.idDroit as idDroit5_0_, this_.idFonction as idFonction5_0_, this_.horaireContrat as horaireC2_5_0_, this_.nom as nom5_0_, this_.prenom as prenom5_0_, this_.idService as idService5_0_, this_.idUser as idUser5_0_ from gestionhoraire.personne this_ where this_.idPersonne=?
    Hibernate: select this_.idDroit as idDroit2_0_, this_.descDroit as descDroit2_0_, this_.nomDroit as nomDroit2_0_ from gestionhoraire.droit this_ where this_.idDroit=?
    Hibernate: select this_.idPersonne as idPersonne5_0_, this_.idDroit as idDroit5_0_, this_.idFonction as idFonction5_0_, this_.horaireContrat as horaireC2_5_0_, this_.nom as nom5_0_, this_.prenom as prenom5_0_, this_.idService as idService5_0_, this_.idUser as idUser5_0_ from gestionhoraire.personne this_ where this_.idPersonne=?
    Hibernate: select this_.idService as idService7_0_, this_.nomService as nomService7_0_ from gestionhoraire.service this_ where this_.idService=?
    Hibernate: select this_.idPersonne as idPersonne5_0_, this_.idDroit as idDroit5_0_, this_.idFonction as idFonction5_0_, this_.horaireContrat as horaireC2_5_0_, this_.nom as nom5_0_, this_.prenom as prenom5_0_, this_.idService as idService5_0_, this_.idUser as idUser5_0_ from gestionhoraire.personne this_ where this_.idPersonne=?
    Hibernate: select this_.idUser as idUser9_0_, this_.login as login9_0_, this_.mdp as mdp9_0_ from gestionhoraire.userlogin this_ where this_.idUser=?
    idSemaine à suppr575
    removeSemaine
    removeJourByIdSemaine
    Hibernate: delete from gestionhoraire.jour where idSemaine=?
    suppression jour ! ! 
    removeCompteurByIdSemaine
    queryString  
    queryString 2   delete from Compteur compteur join compteur.perssemainecompts psc where psc.semaine is not null and psc.semaine.idSemaine = :oldSemaineId
    Lorsque je veux supprimer le compteur, il n'apparait pas le
    C'est pour cela que j'ai fais un System.out.print de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    queryString 2   delete from Compteur compteur join compteur.perssemainecompts psc where psc.semaine is not null and psc.semaine.idSemaine = :oldSemaineId

Discussions similaires

  1. Suppression d'une occurence avec HQl
    Par Emir83 dans le forum JDBC
    Réponses: 0
    Dernier message: 27/12/2009, 17h09
  2. [DOM] suppression d'un noeud fils xml en JAVA
    Par alexandre54 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 20/03/2003, 09h44
  3. Suppression de la contrainte unique
    Par mika dans le forum SQL
    Réponses: 3
    Dernier message: 20/02/2003, 17h56
  4. [CR] suppression du bas de page
    Par grosjej dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 10/09/2002, 08h58
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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