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:
Mais cela donne une erreur:
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; }
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 :
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 @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; } }
D'avance merci pour vos suggestions.
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; } ...
Partager