ORACLE TRIGGER ID AUTOINCREMENT
bonjour,
pour simuler un autoincrement sous ORACLE j'utilise la technique du trigger couplé à une séquence.
j'ai créé une table comme suit (crée la table, la séquence et le trigger):
Code:
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
| CREATE TABLE CLIENT
(
CLIENT_ID INTEGER
,DATE_DERNIERE_CNX TIMESTAMP DEFAULT(SYSTIMESTAMP)
,CONNECTE SMALLINT NOT NULL
,NOM_HOST VARCHAR2(100) NOT NULL
,VERSION VARCHAR2(40) NOT NULL
,LOGIN VARCHAR2(40) NOT NULL
,PROFIL VARCHAR2(40) NOT NULL
,VERSION_OS VARCHAR2(40) NOT NULL
,LIGNE VARCHAR2(20) NOT NULL
,CONSTRAINT CLIENT_PK PRIMARY KEY (CLIENT_ID)
)tablespace &tablespaces_donnees;
CREATE UNIQUE INDEX CLIENT_IDX1 ON CLIENT(NOM_HOST ASC, LOGIN ASC);
DROP SEQUENCE CLIENT_SEQUENCE;
CREATE SEQUENCE CLIENT_SEQUENCE
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
CREATE TRIGGER CLIENT_INSERT_TRIGGER
BEFORE INSERT
ON CLIENT
FOR EACH ROW
BEGIN
SELECT CLIENT_SEQUENCE.nextval INTO :NEW.CLIENT_ID FROM DUAL;
END; |
Dans mon code java, je mappe la table comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Entity
@Table(name="CLIENT", schema="ECLERGENERIQUE")
public class Client implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2682913961805133813L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_CLIENT")
@SequenceGenerator(name = "SEQ_CLIENT", sequenceName = "CLIENT_SEQUENCE", allocationSize = 1)
@Column(name="CLIENT_ID", nullable=false, insertable = false, updatable = false)
Long id;
.
.
. |
lorsque j'utilise mon code java, du coup en base je me retrouve avec un id qui monte de 2 en 2 (2 4 6 8...) alors que dans mon code java lorsque je fais un getId() juste derrière le commit, je me retrouve avec les valeurs 1 3 5 7 ...
En gros, la persistence se passe bien, et le getId me renvoie la bonne valeur, sauf que du coup la base et le trigger ajoute systèmatiquement 1 à la valeur de l'identifiant...
Or j'ai absolument besoin de ce trigger car une autre appli (codée en C++) va venir insérer en base.
La question est : y a-til un moyen d'indiquer à hibernate que le mode de génération de la clé c'est un trigger plutôt que la séquence.
Merci pour l'aide.