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