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 : 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
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 : 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
 
@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.