Bonjour,
Nous avons plusieurs applications qui s'appuie sur un composant commun.
Celui-ci a une classe qui s'appelle SequenceGeneratorBigInteger.java destinée à la gestion des Biginterger/BigDecimal.
Voici la fonction
Mon problème est le suivant : si j'upgrade les librairies Hibernate, les anciennes fonctions notamment liées à org.hibernate.engine.SessionImplementor n'existent plus.
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 @Override public Serializable generate(SessionImplementor session, Object obj) throws HibernateException { try { //org.hibernate.engine.SessionImplementor n'existe plus au-dela de 3.3.2.GA //PreparedStatement st = session.getBatcher().prepareSelectStatement(dialect.getSequenceNextValString(getSequenceName())); PreparedStatement st = session.connection().prepareStatement(dialect.getSequenceNextValString(getSequenceName())); Serializable result = null; try { ResultSet rs = st.executeQuery(); try { rs.next(); //Serializable result = IdentifierGeneratorFactory.get(rs, identifierType); //begin patch hibernate => manage BigInteger and BigDecimal Class clazz = identifierType.getReturnedClass(); if (clazz == Long.class) { result = new Long(rs.getLong(1)); } else if (clazz == Integer.class) { result = new Integer(rs.getInt(1)); } else if (clazz == Short.class) { result = new Short(rs.getShort(1)); } else if (clazz == String.class) { result = rs.getString(1); } else if (clazz == BigDecimal.class) { result = rs.getBigDecimal(1); } else if (clazz == BigInteger.class) { result = rs.getBigDecimal(1).toBigInteger(); } else { throw new IdentifierGenerationException("this id generator generates long, integer, short or string"); } //end patch hibernate => manage BigInteger and BigDecimal if (log.isDebugEnabled()) { log.debug("Sequence identifier generated: " + result); } return result; } finally { rs.close(); } } finally { //org.hibernate.engine.SessionImplementor n'existe plus au-dela de 3.3.2.GA //session.getBatcher().closeStatement(st); session.connection().close(); } } catch (SQLException sqle) { //throw convert(session.getFactory().getSQLExceptionConverter(), sqle, "could not get next sequence value", dialect.getSequenceNextValString(getSequenceName())); throw new HibernateException(sqle.getMessage()); } }
Si je tente de réécrire avec org.hibernate.engine.spi.SessionImplementor, cette fois c'est incompatible avec les anciennes librairies.
Or il faut assurer la compatibilité de cet utilitaire sans changer tous les anciens projets (s'il y a besoin de faire évoluer ce composant, il faut que cette classe fonctionne toujours).
par contre, pour les nouveaux, ça serait bien qu'on ne reste pas bloqué en Hibernate3 juste pour ça.
Je ne vois pas bien comment faire (quels sont les @#! qui font disparaître des fonctions au cours des versions?!)
Merci.
Partager