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

Entrée/Sortie Java Discussion :

Actualisation de données JPA


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Actualisation de données JPA
    Bonjour

    Sous Netbeans, j'ai généré mes classes à partir d'une BDD, puis j'ai généré les class JPA.

    Je developpe quelques lignes. Puis je teste la mise à jour des données si elles ont été modifié par quelqu'un d'autre. Et là je n'arrive pas à obtenir les données de la base. J'ai celles qu'il y avait lors du lancement de l'application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (ChargeAffaire charge : this.listChargeAffaireSelected) {
                ChargeAffaire CA = jpaCharge.findChargeAffaire(charge.getId());
                for (Affaire affaire : CA.getAffaireList()) {
                    try {
     
                        if (this.listMoisSelected.contains(new Mois(affaire.getDateOffre()))) {
                            this.listAffaires.add(affaire);
                        }
                    } catch (NullPointerException npe) {
                        this.listAffaires.add(affaire);
                    }
                }
            }
            this.notifyObserver(listAffaires);
    Comment se fait-il que lorsque je fait "jpaCharge.findChargeAffaire" je ne récupère pas le chargeAffaire actuellement en base de données?

    Merci de vos éclaircissements

  2. #2
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    Bonsoir,

    je reviens à la charge parce que je ne comprend toujours pas pourquoi je n'ai pas les données à jour.

    Voici les @Identity
    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
    @Entity
    @Table(name = "affaire", catalog = "enregistrementaffaires", schema = "")
    public class Affaire implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @Column(name = "IDAFFAIRE")
        private String idaffaire;
        @Column(name = "DATEDDP")
        @Temporal(TemporalType.DATE)
        private Date dateddp;
        @Column(name = "DATELIMITEREPONSE")
        @Temporal(TemporalType.DATE)
        private Date datelimitereponse;
        @Column(name = "DATEOFFRE")
        @Temporal(TemporalType.DATE)
        private Date dateoffre;
        @Column(name = "MONTANT")
        private Float montant;
        @Column(name = "NUMCOMMANDE")
        private String numcommande;
        @Basic(optional = false)
        @Column(name = "DESIGNATIONDDP")
        private String designationddp;
        @Column(name = "REFDDPCLIENT")
        private String refddpclient;
        @Column(name = "MONTANTCOMMANDE")
        private BigDecimal montantcommande;
        @Column(name = "COMMENTAIRE")
        private String commentaire;
        @JoinColumn(name = "IDCONTACT", referencedColumnName = "IDCONTACT")
        @ManyToOne(fetch = FetchType.LAZY)
        private Contact idcontact;
        @JoinColumn(name = "IDCLIENT", referencedColumnName = "IDCLIENT")
        @ManyToOne(fetch = FetchType.LAZY)
        private Client idclient;
        @JoinColumn(name = "IDCHARGEAFFAIRE", referencedColumnName = "IDCHARGEAFFAIRE")
        @ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
        private ChargeAffaire idchargeaffaire;
     
        public Affaire() {
        }.......
    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
    @Entity
    @Table(name = "chargeaffaire", catalog = "enregistrementaffaires", schema = "")
     
    public class ChargeAffaire implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "IDCHARGEAFFAIRE")
        private Integer idchargeaffaire;
        @Basic(optional = false)
        @Column(name = "NOMCHARGEAFFAIRE")
        private String nomchargeaffaire;
        @Basic(optional = false)
        @Column(name = "PRENOMCHARGEAFFAIRE")
        private String prenomchargeaffaire;
        @OneToMany(mappedBy = "idchargeaffaire", fetch = FetchType.LAZY,cascade=CascadeType.ALL)
        private List<Affaire> affaireList;
     
        public ChargeAffaire() {
        }......
    et les jpaController:
    AffaireJpaController:
    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
     public List<Affaire> findAffaireEntities() {
            return findAffaireEntities(true, -1, -1);
        }
     
        public List<Affaire> findAffaireEntities(int maxResults, int firstResult) {
            return findAffaireEntities(false, maxResults, firstResult);
        }
     
        private List<Affaire> findAffaireEntities(boolean all, int maxResults, int firstResult) {
            EntityManager em = getEntityManager();
            try {
                Query q = em.createQuery("select object(o) from Affaire as o");
                if (!all) {
                    q.setMaxResults(maxResults);
                    q.setFirstResult(firstResult);
                }
                return q.getResultList();
            } finally {
                em.close();
            }
        }
    ChargeAffaireJpaController:
    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
      public ChargeAffaire findChargeAffaire(Integer id) {
            EntityManager em = getEntityManager();
            try {
                return em.find(ChargeAffaire.class, id);
            } finally {
                em.close();
            }
        }
    public List<ChargeAffaire> findChargeAffaireEntities() {
            return findChargeAffaireEntities(true, -1, -1);
        }
     
        public List<ChargeAffaire> findChargeAffaireEntities(int maxResults, int firstResult) {
            return findChargeAffaireEntities(false, maxResults, firstResult);
        }
     
        private List<ChargeAffaire> findChargeAffaireEntities(boolean all, int maxResults, int firstResult) {
            EntityManager em = getEntityManager();
            try {
                Query q = em.createQuery("select object(o) from ChargeAffaire as o");
                if (!all) {
                    q.setMaxResults(maxResults);
                    q.setFirstResult(firstResult);
                }
                return q.getResultList();
            } finally {
                em.close();
            }
        }
    la méthode getEntityManager(). Elle est identique pour toutes les classes jpaController.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public EntityManager getEntityManager() {
            return emf.createEntityManager();
        }
    et voici mon main avec lequel j'ai testé mes accè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
     public static void main(String[] args) {
            AffaireJpaController jpaAffaire = new AffaireJpaController();
            ChargeAffaireJpaController jpaCharge = new ChargeAffaireJpaController();
            ChargeAffaire CA = jpaCharge.findChargeAffaire(3);
            for (Affaire aff : CA.getAffaireList()) {
                afficheAffaireUnknown(aff);
            }
     
            for (Affaire aff : jpaAffaire.findAffaireEntities()) {
                afficheAffaireUnknown(aff);
            }
     
            jpaCharge = new ChargeAffaireJpaController();
            CA = jpaCharge.findChargeAffaire(3);
            for (Affaire aff : CA.getAffaireList()) {
                afficheAffaireUnknown(aff);
            }
            for (Affaire aff : jpaAffaire.findAffaireEntities()) {
                afficheAffaireUnknown(aff);
            }
        }
     
        private static void afficheAffaireUnknown(Affaire aff) {
            if (aff.getIdaffaire().startsWith("UNKN")) {
                System.out.println(aff.getIdaffaire());
            }
        }
    Je précise que j'ai mis des points d'arret à l'entrée de chaque for et qu'en parallèle je modifiais des enregistrements dans la base en direct.

    Résultat lors du second CA.GetAffaireList(), j'ai toujours les mêmes données que lors du premier passage. Bien que je les avais modifiées à la fin de la première boucle et que ces modifications sont bien présentes lors du premier jpaAffaire.findAffaireEntities().

    Je voudrais savoir comment se fait-il que dans ma méthode jpaCharge.findChargeAffaire() je ne réalise pas une mise à jour, puisque l'entityManager est vide, on vient de le recréer par EntityManagerFactory!!!

    Au secours.
    Merci

Discussions similaires

  1. Réponses: 22
    Dernier message: 05/06/2018, 09h36
  2. actualisation des données
    Par ESVBA dans le forum Access
    Réponses: 1
    Dernier message: 05/01/2007, 13h42
  3. Actualiser les données d'une page à partir d'une autre
    Par kapikapi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/06/2006, 18h55
  4. Actualiser les données de toutes les cellules d'1 colonne
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/12/2005, 10h00
  5. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44

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