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

Format d'échange (XML, JSON...) Java Discussion :

Modification d'un champ en base de données


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut Modification d'un champ en base de données
    Bonjour,

    je travaille actuellement sur un projet de gestion de prêt en j2ee, et j'ai un problème avec la modification d'un champs en base de données:

    quand mon produit revient de prêt et mauvais état je l'envoie en réparation et voici ce que mon code fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void assignLoanEntryToRepair(int loanEntryId, String assignBy) {
    		LoanEntryEntity loanEntryEntity = em.find(LoanEntryEntity.class, loanEntryId);
    		if (loanEntryEntity == null)
    			throw new NullPointerException("product");
     
    		returnProduct(assignBy, loanEntryEntity);
     
    		List<InputRequestEntity> inputRequests = loanEntryEntity.getProduct().getInputRequest();
     
    		inputRequests.get(inputRequests.size() - 1).setDoit(false);
    		loanEntryEntity.setRepair(true);
    		}
    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
    private void returnProduct(String returnBy, LoanEntryEntity loanEntryEntity) {
    		final ProductEntity product = loanEntryEntity.getProduct();
     
    		em.lock(product, LockModeType.WRITE);
    			if (product.isValidationLock())
    				return;
     
    			loanEntryEntity.setReturned(true);
     
    		InputRequestEntity inputRequest = new InputRequestEntity();
    		inputRequest.setProduct(product);
    		inputRequest.setDoit(true);
     
    		em.persist(inputRequest);
    		em.flush();
     
    		product.getInputRequest().add(inputRequest);				
    	}
    Et lorsque le produit est réparé on le sort de réparation:

    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
    public void outOfRepair(int loanEntryId, String author) {
    		LoanEntryEntity loanEntryEntity = em.find(LoanEntryEntity.class, loanEntryId);
    		if (loanEntryEntity == null)
    			throw new NullPointerException("product");
     
    		ProductEntity product = loanEntryEntity.getProduct();
     
    		em.lock(product, LockModeType.READ);
     
    		if (product.isValidationLock())
    			return;
     
    		List<InputRequestEntity> inputRequests = product.getInputRequest();
     
    		inputRequests.get(inputRequests.size() - 1).setDoit(true);
    		loanEntryEntity.setRepair(false);
    	}
    J'ai un problème avec ma sortie de réparation (OutOfRepair), lors de ma sortie de réparation le champs "doit" en base ne prends pas la valeur "true" (setDoit="true") et je ne comprends pas ce qui se passe , surtout que lorsque mon produit est réparé en moins de 2h et donc est sorti de l'état "repair", le champs doit prend bien la valeur "true" mais quelques heures après lors de la sortie il ne prend plus cette valeur "true".

    Merci pour vos éclairages.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Il ne faudrait pas que tu fasses un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    em.update(loanEntryEntity);
    em.flush();
    dans ta méthode outOfRepair pour sauvegarde les modifications que tu as apportées à ton objet ?

    Romain.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut The method is undefined for the type EntityManager
    Bonjour romain,

    Pourquoi le faire sur lonEntryEntity ?? vu que je n'arrive pas a modifier inputRequetEntity je ne devrais pas plutôt faire un update sur inputRequests vu que c'est lui qui ne modifie pas la valeur de son champs doit??

    La méthode update n'est pas définie dans l' EntityManager, et si j'essayais avec merge()??

    merci.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Oui fais un merge à la place du update, j'ai confondu JPA et Hibernate...

    je pensais que c'était loanEntryEntity que tu n'arrivais pas à modifier. Mais si c'est inputRequetEntity, alors applique le merge sur cette variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    InputRequestEntity lastInputRequest = inputRequests.get(inputRequests.size() - 1);
    lastInputRequest.setDoit(false);
    em.merge(InputRequestEntity);
    em.flush();
    Romain.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut erreur
    Erreur lors de la communication avec la base de données

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Si tu ne nous en dit pas plus ça va être difficile de t'aider... Tu as la stacktrace complète ?

    Romain.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut stacktrace
    Bonjour romain,

    rien d'inhabituel j'arrive à générer mon ear et le déployer sans problème, c'est lors des tests de fonctionnalité via l'interface que j'ai le message d'erreur. alors voici le fichier de log que m'a généré glassfish.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused by: java.lang.IllegalArgumentException: 
    object: {{[intranet.gp.entity.InputRequestEntity@491b0be2, intranet.gp.entity.InputRequestEntity@9fbdf1c5, intranet.gp.entity.InputRequestEntity@aa6b8747, intranet.gp.entity.InputRequestEntity@18236df1, intranet.gp.entity.InputRequestEntity@c74ce69d, intranet.gp.entity.InputRequestEntity@c3d832ab, intranet.gp.entity.InputRequestEntity@8ebc9e07, intranet.gp.entity.InputRequestEntity@28720d51, intranet.gp.entity.InputRequestEntity@6bf356d6, intranet.gp.entity.InputRequestEntity@e38d7699, intranet.gp.entity.InputRequestEntity@b4ccc8a3, intranet.gp.entity.InputRequestEntity@ecab55a]}} 
    is not a known entity type. at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:2719)
    Il semblerait que ta classe ne soit pas connue de Toplink... Est-ce que ta classe InputRequestEntity est bien annonté de @Entity ?

    Essai d'ajouter ça dans ton persistence.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    ça devrait aider toplink à trouver ta classe (que tu as peut-être oubliée d'ajouter dans ton persistence.xml).

    Romain.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut persistence.xml
    Super ça passe au moins,

    pourtant la classe InputRequestEntity était bien annoté
    et dans mon persistence.xml j'avais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <exclude-unlisted-classes />
    et j'ai modifié par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    au moins le merge est passé, je verrais si j'arrive toujours à récupérer les produits après plusieurs heures , parce que c'est quand mes produits mettent long dans l’état oufOfRepair que ça pose problème.

    tous les produits que je passe en réparation prennent bien le statut "true" quand ils sont sortis après quelques heures, maintenant après plusieurs heures ils ne prennent ne modifient plus doit.

    Merci romain.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 39
    Par défaut ça fonctionne
    Bonjour,

    Ce matin j'ai sorti quelques produits que j'ai envoyé en réparation hier et cette fois ci ils ont bien modifiés le champs doit à "true".

    Merci Romain.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/05/2009, 18h10
  2. Réponses: 6
    Dernier message: 24/10/2008, 23h16
  3. champ de Base de données
    Par Michel85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/06/2008, 10h31
  4. nom bouton=champs dans base de données
    Par lg022 dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/04/2008, 07h56
  5. Réponses: 5
    Dernier message: 01/12/2006, 10h00

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