Bonjour, je suis en train de développer un Batch en JAVA qui utilise Hibernate (3) et Hibernate Annotation (3.2.0.GA). J'ai une base de données PostGre.
Lorsque je fais un INSERT j'utilise une séquence. Cette séquence est déjà entamé (j'ai dû faire la refonte d'une application déjà existante).
La séquence est à 42 et utilise une incrémentation +1. Pourtant à l'INSERT à l'aide de Hibernate l'Id généré est 2400 (environ) et à l'INSERT suivant il incrémente de 50.

Ma séquence :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE SEQUENCE ss_equipment_seq2
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 47
  CACHE 1;
ALTER TABLE ss_equipment_seq2 OWNER TO stat_server;
Ma classe contenant l'objet à insérer dans la base :
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
@Entity
@SequenceGenerator(name="equipment_seq", sequenceName="ss_equipment_seq2") 
@Table	(	name="ss_equipment2",
			schema="public", 
			uniqueConstraints =	{	@UniqueConstraint(columnNames={"eq_owner", "eq_name", "eq_ip"}), 
									@UniqueConstraint(columnNames={"eq_owner", "eq_ownerid"})
								} 
		)
public class SsEquipment implements java.io.Serializable
{
 
	public static Logger _log = LoggerManager.getInstance().getLogger();
	private static final long serialVersionUID = 1L;
 
	@Id    
    @Column(name="eq_id", unique=true, nullable=false)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="equipment_seq") 
	private int eqId;
 
...    
 
}
Le bout de code qui permet l'insert :
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
	public boolean insert ()
	{
		// Ouverture de la transaction
		Transaction txn = HibernateUtil.currentSession().beginTransaction();
 
		// Execution de la requête
		try
		{
			_log.debug(LogType.T_CONFIG,"Création de l'équipement : " + this.getId() + " - " + this.getEquipmentKey());
			HibernateUtil.currentSession().save(this);
		}
		catch (Exception e)
		{
			_log.error(LogType.T_CONFIG, "Erreur lors de la création de l'équipement : " + e.getMessage());
			return false;
		}
		finally
		{
			txn.commit();
		}
 
		return true;
	}
Et voici mon HibernateUtil :
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
public class HibernateUtil
{
	private static final SessionFactory sessionFactory;
 
	static
	{
		try
		{
			// Crée la SessionFactory
			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		}
		catch (HibernateException ex)
		{
			throw new RuntimeException("Problème de configuration : " + ex.getMessage(), ex);
		}
	}
 
	public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
 
	public static Session currentSession() throws HibernateException
	{
		Session s = (Session) session.get();
 
		// Ouvre une nouvelle Session, si ce Thread n'en a aucune
		if (s == null)
		{
			s = sessionFactory.openSession();
			session.set(s);
		}
 
		return s;
	}
 
	public static void closeSession() throws HibernateException
	{
		Session s = (Session) session.get();
		session.set(null);
		if (s != null)
			s.close();
	}
}
J'ai fait exactement comme dans la documentation Hibernate Annotation et pourtant ça ne marche pas.

Merci d'avance