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 :

id égal à 0 et discrimant ne s'affiche pas.


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut id égal à 0 et discrimant ne s'affiche pas.
    Bonjour à tous,

    je dois faire un petit projet avec les EJB et j'ai deux problèmes.

    Je vous explique la situation.

    J'ai 3 classes:

    Produit
    Casquette
    Tshirt

    (Casquette et Tshirt héritent de Produit)

    Le tout est sauvegardé dans une BDD... Les EJB m'ont créé automatiquement la table Produit avec tous les attributs des deux classes.

    J'aimerais, sur ma page jsp, afficher l'identifiant du produit, et son type. (Caractère discriminant)

    Mais voici le problème:

    Déjà, l'identifiant est toujours égal à 0 dans la page web et dans la console quand je l'affiche, mais il ne l'est pas dans la BDD.

    Voici le code:

    Classe produit:
    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
    @Entity
    @Table(name="PRODUIT")
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name="DTYPE",
                         discriminatorType=DiscriminatorType.STRING)
    @NamedQueries({@NamedQuery(name = "Produit.findAll", query = "SELECT p FROM Produit p"),
    @NamedQuery(name = "Produit.findByProduitId", query = "SELECT p FROM Produit p WHERE p.id = :produitId")})
     
    public class Produit implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="id")
        private int id;
        private float prix;
        private String description;
        private String nom;
        private String dtype;
        private String taille;
    ...... (Setters & Getters)
    Classe Casquette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Entity
    @NamedQueries({@NamedQuery(name = "Casquette.findAll", query = "SELECT c FROM Casquette c"),
    @NamedQuery(name = "Casquette.findByCasquetteId", query = "SELECT c FROM Casquette c WHERE c.id = :casquetteId")})
    @DiscriminatorValue("Casquette")
     
    public class Casquette extends Produit implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private String couleur;
    ...... (Setters & Getters)
    Classe Tshirt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @NamedQueries({@NamedQuery(name = "Tshirt.findAll", query = "SELECT t FROM Tshirt t"),
    @NamedQuery(name = "Tshirt.findByTshirtId", query = "SELECT t FROM Tshirt t WHERE t.id = :TshirtId")})
    @DiscriminatorValue("Tshirt")
    public class Tshirt extends Produit implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private String typeManche;
        private int deco; // 0 -> Uni, 1 -> Texte, 2 -> Logo/Image
    GestionnaireProduitBean.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void afficher_liste_produits()
        {
            Query query = em.createNamedQuery("Produit.findAll");
            Collection< Produit > result = query.getResultList();
     
            for(Produit prod:result ) {
                System.out.println("ID: " + prod.getId() + " - Nom: "+prod.getNom() + " - Description: " + prod.getDescription()+ "- Type:" + prod.getDtype());
            }
        }
    L'identifiant est toujours nul !



    Mon second problème concerne l'affichage du type de produit. (Je rappelle, le caractère discriminant dans la table Produit)
    En fait, il ne s'affiche pas immédiatement quand j'ajoute un produit et que je l'affiche... Pendant un certain temps, il est à null, et au bout d'un moment (ou alors quand je redémarre le serveur), ça s'affiche...

    Des idées??

    Merci d'avance !

    Philippe

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Bonjour à tous,

    première réponse à mon problème.
    Il ne faut pas mettre les idenfitifants (et donc les getter/setter) pour les classes filles...
    Une fois ce truc corrigé, ça marche pour les id.

    Mais j'ai toujours le second problème.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Pour ton second problème c'est peut etre du à ta transaction. Il nous faudrait plus d'éléments.

    Tu ne peux afficher un produit que tu viens d'enregistrer ? Ce produit a été créé à la main en base de données ou l'as tu créé depuis JPA? Attention si tu cré tes données à la main directement dans la base de données JPA utilisera le cach et n'executera pas de requete.

    La création est-elle faite dans une autre transaction que l'affichage ?

    Si tu veux voir en détaille quelles sont les requetes executés sur ta base depuis ton appli, je te conseil de brancher p6spy (ca prend 2 min) ca t'aidera surrement a comprendre le pourquoi du comment.

Discussions similaires

  1. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 12h03
  2. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 19h56
  3. Réponses: 3
    Dernier message: 22/03/2004, 17h49
  4. Les classes ne s'affichent pas
    Par karl3i dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 15h52
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 12h30

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