Bonjour,
J'ai pris l'habitude (peut-être à tord) de générer des champs "code" de mes entity à partir du champs "id" avec le @PrePersist de la façon suivante :
Ce code fonctionne très bien sous JBoss 4.2 avec PostgreSQL ou Oracle 9g/10g. En revanche, il ne fonctionne pas sous JBoss 5.1 avec Oracle 11g. Tous mes entity ont pour valeur du champ code "DOC_0".
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 @Entity @SequenceGenerator(sequence="S_DOCUMENT",name="S_DOCUMENT") @Table(name = "DOCUMENT") public class Document { private long id; private String code; private String name; @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="S_DOCUMENT") @Column(name = "DOC_ID", unique = true, nullable = false, insertable = false, updatable = false) public long getId() { return this.id; } public void setId(long id) { this.id = id; } @Column(name="DOC_CODE",nullable = false) public String getCode() { return this.code; } public void setCode(String code) { this.code= code; } @Column(name="DOC_NAME",nullable = false) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @PrePersist public void myPrePersist() { setCode("DOC_"+getId()); } }
En activant des logs, je me rends compte que le code Java exécuté par le @PrePersist est exécuté avant la récupération de la prochaine valeur de la séquence. Du coup, le champ "id" vaut toujours 0 lorsque la méthode myPrePresist() est exécutée.
Deux questions :
- Quel est le comportement normal ?
- Comment implémenter proprement ce que je souhaite faire ?
Merci pour votre aide !
Partager