Bonjour,
J'ai un problème lors d'un fetch join sur une collection, qui me renvoie une liste de deux éléments : un null et un objet Droit. Or, seul l'objet devrait être retourné.
J'ai vérifié mon jeu de test => OK.
J'ai testé mon DAO avec un Criteria et une Query HQL au cas où, mais le résultat est le même.
Est-ce un problème de mapping ? Ou au niveau de ma requête ?
Cordialement.
Classe Module :
Classe Droit :
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 @Entity public class Module implements Serializable { /** Identifiant. */ @Id @SequenceGenerator(name = "seq_module", sequenceName = "seq_module", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_module") private Integer id; /** Libellé. */ @Basic private String libelle; /** Liste des droits rattachés au module. */ @OneToMany(mappedBy = "module") @IndexColumn(name = "id") private List<Droit> droits; [...] /** {@inheritDoc} */ @Override public boolean equals(Object other) { if (other == null) { return false; } if (other == this) { return true; } if (!(other instanceof Module)) { return false; } Module cast = (Module) other; if (this.id == null ? cast.id != this.id : !this.id.equals(cast.id)) { return false; } return true; } /** {@inheritDoc} */ @Override public int hashCode() { return id.hashCode(); } }
Méthode DAO :
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 @Entity public class Droit implements Serializable { /** Identifiant. */ @Id @SequenceGenerator(name = "seq_droit", sequenceName = "seq_droit", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_droit") private Integer id; /** Libellé du droit. */ @Basic private String libelle; /** Code du droit. */ @Basic private String code; /** Module applicatif auquel est rattaché le droit. */ @ManyToOne private Module module; [...] /** {@inheritDoc} */ @Override public boolean equals(Object other) { if (other == null) { return false; } if (other == this) { return true; } if (!(other instanceof Droit)) { return false; } Droit cast = (Droit) other; if (this.id == null ? cast.id != this.id : !this.id.equals(cast.id)) { return false; } return true; } /** {@inheritDoc} */ @Override public int hashCode() { return id.hashCode(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public List<Module> loadAllWithDroits() { DetachedCriteria criteria = DetachedCriteria.forClass(Module.class); criteria.setFetchMode("droits", FetchMode.JOIN); return (List<Module>) getHibernateTemplate().findByCriteria(criteria); }
Partager