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());
}
} |
Partager