After all I came up with the following (hibernate version 3.2.5GA).
Table01 is a class mapped to a database table. Its id generator is an enhanced.TableGenerator:
Code:
<id name="id" type="long">
<column name="id" />
<generator class="org.hibernate.id.enhanced.TableGenerator">
<param name="segment_value">seq_table01_id</param>
<param name="initial_value">1</param>
<param name="increment_size">10</param>
<param name="optimizer">pooled</param>
</generator>
</id>
And the following code lets me generate id-s without an immadiate save. It has 3 unchecked casts but it works.
Code:
Session hibSession = sessionFactory.openSession();
long key = ((Long) ((AbstractEntityPersister) sessionFactory
.getClassMetadata(Table01.class)).getIdentifierGenerator()
.generate((SessionImplementor) hibSession, null))
.longValue();
hibSession.close();