L'objectif est de récupérer une liste d'étudiants (qui hérite de personne) dans un contrôleur JSF en faisant un appel vers des EJB.

J'ai pas mal cherché avec google et sur ce forum sans succès, pourtant mon problème me semblais classique, j'ai donc débugué à fond mais voilà, je pige pas ce qui m'arrive :

Il y a deux classes : Personne et Etudiant
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
@Entity
@Table(name="PERSONNE")
@Inheritance(strategy=InheritanceType.JOINED)
public class Personne implements Serializable {
 
  private static final long serialVersionUID = -1323111287206189095L;
 
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  @Column(name = "id", unique = true, nullable = false)
	private Long id;
	private String nom;
 
	protected Personne() {
 
	}
 
	protected Long getId() {
		return id;
	}
 
	protected void setId(Long id) {
		this.id = id;
	}
 
	protected String getNom() {
		return nom;
	}
 
	protected void setNom(String nom) {
		this.nom = nom;
	}
 
}
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
@Entity
@Table(name="ETUDIANT")
@PrimaryKeyJoinColumn(name = "id")
@Inheritance(strategy = InheritanceType.JOINED)
public class Etudiant extends Personne implements Serializable {
 
	private static final long serialVersionUID = 8568384832356566022L;
 
  private String section;
 
	public Etudiant() {
 
	}
 
	public String getSection() {
		return section;
	}
 
	public void setSection(String section) {
		this.section = section;
	}
 
	public Long getId() {
		return super.getId();
	}
 
	public void setId(Long idEtu) {
		super.setId(idEtu);
	}
 
	public String getNom() {
		return super.getNom();
	}
 
	public void setNom(String nom) {
		super.setNom(nom);
	}
 
 
}
Au niveau du session bean tout marche, j'ai un étudiant avec ses propriétés (qu'elles soient héritées ou non) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
	public List<Etudiant> lister() {
		List<Etudiant> etudiants = new ArrayList<Etudiant>();
		Query query = em.createQuery("from Etudiant e ");
 
		etudiants = query.getResultList();
 
		return etudiants;
 
	}
Au niveau du contrôleur JSF j'obtient bien une liste d'étudiants, mais les propriétés héritées de Personne (id et nom) sont null ..

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
	public void listerEtudiants() {
		etudiants = EtudiantBM.lister();
	}
Comment est-ce possible que le sessionBean contienne toutes les propriétés puis qu'en les envoyant vers JSF toutes les propriétés héritées deviennent null ?

J'ai même essayé de mettre la visibilité des méthodes de la classe Personne en public .. Sans succès .. Je sèche là ..