Bonjour,

Illustrons tout de suite mon problème.

Disons que j'ai une classe "Event". Un "Event"a une liste de "Module", la classe "Module" a un attribut de type "ModuleType", et dans la classe "ModuleType" se trouve l'attribut de type int "showOrder".

Je souhaite que lorsque je récupère pour un "Event" la liste des "Module", cela se fasse en triant sur "ModuleType.showOrder".

Dans la classe Event, j'essaie ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "event_id", nullable = true)
    @OrderBy("moduleType.showOrder ASC")
    public Set<Module> getModules() {
	return this.modules;
    }
Mais cela donne une erreur:

org.hibernate.AnnotationException: property from @OrderBy clause not found: ......bub.event.Module.moduleType.showOrder

Si au lieu de préciser dans la clause OrderBy "moduleType.showOrder" je mets simplement "moduleType", il n'y a plus d'erreur mais c'est la clé primaire qui est utilisée pour le tri.

A tout fin utile, un extrait de la classe ModuleType :
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
public class ModuleType implements Serializable {
 
    /**
     * 
     */
    private static final long serialVersionUID = -2924162449429603358L;
 
    private Long id;
...
    private int showOrder;
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
	return this.id;
    }
 
    public void setId(Long id) {
	this.id = id;
    }
 
...
 
    public int getShowOrder() {
	return this.showOrder;
    }
 
    public void setShowOrder(int showOrder) {
	this.showOrder = showOrder;
    }
 
}
Et un extrait de la classe "Module" :

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
 
 
@Entity
public class Module implements Serializable {
 
    /**
     * 
     */
    private static final long serialVersionUID = -3070837521678812959L;
 
    private Long id;
 
...
 
    private ModuleType moduleType;
    private ModuleCategory moduleCategory;
 
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
	return this.id;
    }
 
    public void setId(Long id) {
	this.id = id;
    }
 
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "moduleType_id", nullable = false)
    public ModuleType getModuleType() {
	return this.moduleType;
    }
 
    public void setModuleType(ModuleType moduleType) {
	this.moduleType = moduleType;
    }
 
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "moduleCategory_id", nullable = false)
    public ModuleCategory getModuleCategory() {
	return this.moduleCategory;
    }
 
    public void setModuleCategory(ModuleCategory moduleCategory) {
	this.moduleCategory = moduleCategory;
    }
 
...
D'avance merci pour vos suggestions.