Bonjour,

J'ai mis en place un projet WebService avec Spring Hibernate et Jersey.
J'aurai besoin de votre aide pour optimiser le code.
Voici le contexte simplifié. J'ai une classe Collaborateur qui possède une liste de niveau :

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
 
@Entity
@Table (name = "collaborateur")
@XmlRootElement(name = "collaborateur")
@XmlAccessorType(XmlAccessType.PROPERTY)
@SequenceGenerator(name = "collaborateur_id_seq", sequenceName = "collaborateur_id_seq")
public class Collaborateur implements Serializable {
private Integer id;
private List<Niveau> niveaux;
        @Id
	@GeneratedValue(generator = "collaborateur_id_seq", strategy = GenerationType.SEQUENCE)
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
       @OneToMany (targetEntity=Niveau.class, mappedBy="collaborateur", fetch= FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	public List<Niveau> getNiveaux() {
		return niveaux;
	}
	public void setNiveaux(List<Niveau> niveaux) {
		this.niveaux = niveaux;
	}
Comme vous pouvez le constater la liste de niveau est en FetchType.LAZY.
Dans les DAO se trouvent deux méthodes : l'une remonte les collaborateurs sans les niveaux et l'autre avec les niveaux.

Le problème est que lorsque j'appelle la méthode qui ne remonte pas les niveaux, Jersey transforme les collaborateurs en XML puis il tente d'accéder à la liste de niveaux, ce qui impliquent une erreur de lazy loading.

La solution de mettre un FetchType.EAGER me convient moyennement.
Est-il possible d'ajouter dynamiquement l'annotation XMLTransient lorsque l'on le souhaite ?
Auriez vous une solution alternative ?

Merci par avance.