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

JPA Java Discussion :

Supprimer en base les objets supprimés dans une ArrayList


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut Supprimer en base les objets supprimés dans une ArrayList
    Bonjour,

    J'ai une entity qui contient une liste d'une autre entity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Entity
    @Table(name = "dbo.EMP_EMPLOYE")
    public class Employe extends BusinessEntite {
     
           @OneToMany(mappedBy = "employe", fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
           private List<EmployePer> employePerList;
    }
    Est-il possible que quand j'enlève une élément EmployePer de la liste (employe.removeEmployePer(periode)) et que je fait ensuite un merge du bean Employe, un delete soit fait sur la table EmployePer pour supprimer l'élément supprimé de la liste ?
    Actuellement je fais comme le code qui suit mais je me demandais s'il n'y avait pas possibilité d'automatiser et ainsi enlever la requete m_employePerDao.deleteEmployePer(periode); pour qu'elle se fasse toute seule (JPA détecte que la liste a changé et delete automatiquement l'objet supprimé de la liste) ?

    Car dans la cas contraire, si j'ajoute un élément dans la liste, un insert dans EmployePer est fait automatiquement, sans que j'ai quoique ce soit à faire....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Override
    	public void updateEmploye(Employe employe) {
    		List<EmployePer> lstEmpPer = new ArrayList<>(employe.getEmployePerList());
    		for (EmployePer periode : lstEmpPer) {
    			if (periode.isDeleted()) {
    				if (periode.getId() > 0) {
    					m_employePerDao.deleteEmployePer(periode);
    				}				
                                    employe.removeEmployePer(periode);
    			}
    		}
    		m_employeDao.updateEmploye(employe);
    	}
    Merci pour votre aide

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    Salut,
    je ne saisie pas ta question?
    L´as tu fait comme tu l´explique et cela n´a pas fait un Update comme prevu?

    Eric

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Salut,

    Dans l'ordre j'ai fais :

    1. Enlever un élément de la liste (ArrayList)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    employe.removeEmployePer(periode);
    2. Fait un merge de Employe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entityManager.merge(employe);
    => Aucune requête de mise à jour (update, delete)

    -------------------------------------------------------------------------------------

    1. Même chose mais en plus modification d'un autre champ de type String
    2. Fait un merge de Employe

    =>
    2015-07-16T13:18:42.889+0200|Précis: UPDATE dbo.EMP_EMPLOYE SET LOGIN = ?, VERSION = ? WHERE ((ID = ?) AND (VERSION = ?))
    bind => [jonas, 3, 2, 2]
    -------------------------------------------------------------------------------------
    1. Ajouter un élément à la liste (ArrayList)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    employe.addEmployePer(periode);
    2. Fait un merge de Employe

    =>
    2015-07-16T13:20:36.573+0200|Précis: INSERT INTO dbo.EMP_EMPLOYE_PER (CATEGORIE, FONCTION, PERIODE_DEBUT, PERIODE_FIN, TARIF, TARIF_2, VERSION, INT_EMPLOYE_ID, GL_SOCIETELIEU_DOMAINECOMP_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
    bind => [null, null, 2010-01-01, 9999-12-31, 0.0, 0.0, 1, 2, 5]


    Pourquoi l'insert est implicite alors que le delete ne l'est pas ?

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    parceque que tu detaches seulement periode d´un employé, donc c´est employe qui recoit une nouvelle Liste( elle peut etre null).
    mais les entités periode ne sont pas effacés de la bases de données.

    Eric

  5. #5
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Met un CascadeType.DELETE_ORPHAN pour supprimer les employés "orphelins" après le merge

  6. #6
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Ok donc je dois bien faire les delete de periode moi-même !?

    @eulbobo : Je n'ai pas vraiment besoin de supprimer les orphelins, j'en ai pas en fait. Je voudrais automatiquement supprimer un fils sans supprimer le père

  7. #7
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Autre cas similaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @ManyToMany
    @JoinTable(
    	name="MD_MANDAT_LOCALITE",
    	joinColumns={@JoinColumn(name="MD_MANDAT_ID", referencedColumnName="ID")},
    	inverseJoinColumns={@JoinColumn(name="AD_LOCALITE_ID", referencedColumnName="ID")})
    private List<Localite> listLocalites;
    JPA me créé automatiquement une table de lien avec l'id de mandat et l'id de localite.

    En java j'ai une table dans laquelle je peux ajouter des localités pour les affecter à un mandat. Si je veux enlever une localité d'un mandat .... je peux le faire sans faire moi-même une requete du genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM MandatLocalite m WHERE m.localite = :localite

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

Discussions similaires

  1. Comment ramener les objets associés dans une projection?
    Par Wise_Sherkaan dans le forum Hibernate
    Réponses: 1
    Dernier message: 21/05/2013, 13h03
  2. Retourner les objets declaré dans une classe
    Par slix_alex dans le forum Général Java
    Réponses: 2
    Dernier message: 24/03/2011, 19h00
  3. Cibler les objets textes dans une animation
    Par Myrrdin dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 22/06/2010, 14h43
  4. Réponses: 2
    Dernier message: 23/03/2009, 13h25
  5. [CLI] Filtrer les objets modifiés dans une version Tag
    Par peaceinpal dans le forum Subversion
    Réponses: 2
    Dernier message: 27/01/2009, 10h28

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