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

Servlets/JSP Java Discussion :

mise à jour bdd mais non actif


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut mise à jour bdd mais non actif
    Bonjour,
    j'ai un petit souci avec la mise à jour de la base de donnée.
    Lorsque j'insère un élément dans une base de donnée, la donnée est bien inséré mais elle ne s'affiche pas. Je dois redéployer mon application pour qu'elle s'affiche.

    Il s'agit d'une application J2EE (JSP - EJB - JPA).

    Par ex,
    j'ai un artiste qui peut être dans une plusieurs groupes.
    Je stocke dans l'entité Artiste, la liste des groupes sous forme de List.

    Idem pour groupe, qui peut avoir plusieurs artistes.

    Voici le code des deux entities :

    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
     
    @Entity
    public class Artiste implements Serializable {
    	@Id
    	@GeneratedValue(strategy = GenerationType.SEQUENCE)
    	private int idartiste;
     
    	private String nom;
     
    	private String prenom;
     
    	private String email;
     
    	private String role;
     
     
    	private String motpasse;
     
    	private static final long serialVersionUID = 1L;
     
    	public Artiste() {
    		super();
    		listeGroupe = new ArrayList<Groupe>();
     
    	}
     
    	public int getIdartiste() {
    		return this.idartiste;
    	}
     
    	public void setIdartiste(int idartiste) {
    		this.idartiste = idartiste;
    	}
     
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getPrenom() {
    		return this.prenom;
    	}
     
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
     
    	public String getEmail() {
    		return this.email;
    	}
     
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    	public String getRole() {
    		return this.role;
    	}
     
    	public void setRole(String role) {
    		this.role = role;
    	}
     
     
     
    	public String getMotpasse() {
    		return this.motpasse;
    	}
     
    	public void setMotpasse(String motpasse) {
    		this.motpasse = motpasse;
    	}
    	@OneToMany(cascade = CascadeType.REMOVE,
    			  fetch = FetchType.EAGER)
     
    	  @JoinTable (name="groupeartiste",
    	      joinColumns={@JoinColumn(name="idartiste")},
    	      inverseJoinColumns=@JoinColumn (name="idgroupe"))
    	 private List<Groupe> listeGroupe; 
     
    	public List<Groupe>getListeGroupe(){
    		return this.listeGroupe;
    	}
    	public void setListeGroupe(List<Groupe> listeGroupe){
    		this.listeGroupe = listeGroupe;
    	}
     
    }
    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
     
     
    public class Groupe implements Serializable {
    	@Id
    	@GeneratedValue(strategy = GenerationType.SEQUENCE)
    	private int idgroupe;
     
    	private String nom;
     
    	private String photo;
     
     
    	@Lob
    	private String valide;
     
    	@Lob
    	private String informations;
     
    	private static final long serialVersionUID = 1L;
     
    	public Groupe() {
    		super();
    		groupeGenre = new ArrayList<Genre>();
    		groupeArtiste = new ArrayList<Artiste>();
    	}
     
    	public int getIdgroupe() {
    		return this.idgroupe;
    	}
     
    	public void setIdgroupe(int idgroupe) {
    		this.idgroupe = idgroupe;
    	}
     
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getPhoto() {
    		return this.photo;
    	}
     
    	public void setPhoto(String photo) {
    		this.photo = photo;
    	}
     
     
    	public String getValide() {
    		return this.valide;
    	}
     
    	public void setValide(String valide) {
    		this.valide = valide;
    	}
     
    	public String getInformations() {
    		return this.informations;
    	}
     
    	public void setInformations(String informations) {
    		this.informations = informations;
    	}
    	@OneToMany(cascade = CascadeType.MERGE,
    			  fetch = FetchType.EAGER)
     
    	  @JoinTable (name="groupegenre",
    	      joinColumns={@JoinColumn(name="idgroupe")},
    	      inverseJoinColumns=@JoinColumn (name="idgenre"))
    	private List<Genre> groupeGenre; 
     
    	public List<Genre> getListGenre(){
    		return this.groupeGenre;
    	}
    	public void setListGenre(List<Genre> listGenre){
    		this.groupeGenre = listGenre;
    	}
     
    	@OneToMany(cascade = CascadeType.PERSIST,
    			  fetch = FetchType.EAGER)
     
    	  @JoinTable (name="groupeartiste",
    	      joinColumns={@JoinColumn(name="idgroupe")},
    	      inverseJoinColumns=@JoinColumn (name="idartiste"))
    	private List<Artiste> groupeArtiste; 
     
    	public void setListArtiste(List<Artiste> listeArtiste){
    		this.groupeArtiste = listeArtiste;
    	}
     
    	public List<Artiste> getListArtiste(){
    		return this.groupeArtiste;
    	}
     
    }
    Je sais que le problème vient des listes de groupes ou artistes, car par ex
    lorsque je modifie dans mon interface le nom du groupe, il est directement affiché alors que lorsque j'ajoute un artiste à la liste ou j'ajoute un groupe à la liste, l'affichage n'est pas fait, il récupère la liste de départ de l'application.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    tout à l'heure, j'étais sur à 90% que ça venait des listes, mais là, c'est à 100%

    par ex, j'ai crée un client test EJB pour faire les tests.

    Voici un ex concret :

    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
     
                     Groupe g1 = new Groupe();
    	          g1.setInformations("infors");
    	          g1.setNom("nomGroupe");
    	          g1.setPhoto("url/photo.jpg");
    	          g1.setValide("1");
     
    	          List<Genre> genre = new ArrayList<Genre>();
    	          List<Artiste> listeArtiste = new ArrayList<Artiste>();
    	          Genre genre1 = new Genre();
    	          Genre genre2 = new Genre();
    	          genre1.setIdgenre((beanRemoteGenre.getIdGenre("rock")));
    	          genre1.setNom("rock");
    	          genre2.setIdgenre((beanRemoteGenre.getIdGenre("jazz")));
    	          genre2.setNom("jazz");
    	          genre.add(genre1); 
    	          genre.add(genre2);          
    	          Artiste artiste = new Artiste();
    	          artiste.setEmail("email");
    	          artiste.setMotpasse("motdepasse");
    	          artiste.setNom("nom");
    	          artiste.setPrenom("prenom");
    	          artiste.setRole("role");
    	          listeArtiste.add(artiste);
    	          g1.setListArtiste(listeArtiste);
    	          g1.setListGenre(genre);
    	          //je crée le groupe
                       beanRemote.createGroupe(g1);
     
                      /* je récupère l'artiste avec l'email */
    	          Artiste ar = beanRemoteArtiste.getArtiste("email");
    	          System.out.println(ar.getNom()); // le nom s'affiche bien
    	          for (Groupe g: ar.getListeGroupe()){
    	        	  System.out.println(g.getNom());//ne s'affiche pas alors que si je redéploie, ça s'affiche
    	          }

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Et comment au travers de ta page tu fais la requête sur ton dao ou ton entity manager ? C'est certainement pas un problème lié à tes entity mais plutot de la manière dont tu y a accèdes et que tu les mets en cache dans un scope session

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    dans ma page,
    j'y accède par un scope request.

    j'ai crée une classe intermédiaire qui appelle mes ejb.

    A partir de ma page jsp, j'appelle les méthodes de la classe intermédiaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean id="artiste" class="pojo.ArtistePOJO"  scope="request"/>
    dans cette classe intermédiaire, par ex, je récupère un artiste avec sa liste de groupe.
    et donc je récupère son nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:getProperty name="artiste" property="nom"/>
    et la liste des groupes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <c:forEach var="groupe" items="${artiste.listeGroupe}">
     <input type="radio" checked name="idGroupe" value="${groupe.idgroupe}"/>
     <c:out value="${groupe.nom}"/>
    <br/>
     </c:forEach>
    et comme je l'ai dit précédemment, si je crée par exemple un artiste, puis je me connecte, je récupère bien ses infos mais pas sa liste de groupe sachant que le groupe est bien inséré après la création.

    il faut que je redéploie l'application.

    Mais pourquoi alors avec un client main de test, lors de la création, je rencontre le même problème qu'avec une page jsp.
    Je pense plutôt que ça vient de mes entités

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    On m'a dit concernant le pb ci dessus

    En fait cela sera inséré à la fin de ta transaction.
    Donc fini ta transaction après l'insertion et ouvre une nouvelle
    pour tester si les données on bien été inséré.
    Comme je laisse la gestion des transactions au conteneur. Donc il n'était pas nécessaire de mettre des begin,commit....

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @TransactionManagement(TransactionManagementType.CONTAINER)
    à votre avis, je dois gérer moi-même les transactions pour voir les données de la liste lors de l'insertion

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    je laisse tomber !!, ça me soule,
    j'ai même essayé de gérer moi même les transactions, mais pareil, il insère bien
    le groupe dans la table Groupe
    l'artiste dans la table artiste
    les id du groupe et artiste dans GroupeArtiste

    ensuite récupère bien les infos du groupe et artiste inséré sauf la liste des groupes (GroupeArtiste)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    c bon ça fonctionne!!
    c juste une erreur de conception de mes méthodes.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/04/2007, 14h21
  2. Mise à jour BDD sans perdre les données
    Par penchu dans le forum Accès aux données
    Réponses: 4
    Dernier message: 07/02/2007, 11h21
  3. PreparedStatements et mise à jour BDD
    Par florentB dans le forum JDBC
    Réponses: 2
    Dernier message: 17/01/2007, 14h30
  4. IIS - Installé mais non actif ?
    Par yamadix dans le forum IIS
    Réponses: 1
    Dernier message: 26/11/2006, 21h28
  5. Module de Mise à jour BDD access via un site sécurisé
    Par Askarod dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/12/2005, 08h31

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