Была проблема — замапить два класса (родитель и наследник) на две таблицы в базе (MSSQL), связанные по id.
В первой таблице (предназначенной для родителя) id поле было indentity.
Проще говоря_ hibrnaty при вставке строки (создании нового объекта) надо было вставить строку в первую таблицуб потом select @@identity вытащить сгенерированный базой ключ и вставить во вторую таблицу запись с этим ключем.
НО был очень удивлен, когда вместо сгенерированного зачения ключа вернулся 0.
Дальнейшее расследование JDBC показало, что select @@identity не вернет ключ сгенерированный при педыдущем Inserte если не закрыть Statement этого inserta. То есть надо делать так:
Statement st = conn.createStatement();
st.executeUpdate("insert into tab(name) values ('ABCDEF')");
st.close();
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery("select @@identity");
копание в исходниках hibernate показало, что Statement не всегда закрывается, часто он возвращается в кеш, пришлось "довести напильником" — в классе net.sf.hibernate.persister.NormalizedEntityPersister в методе
Serializable insert(Object[] fields, Object object, SessionImplementor session)
добавить закрытие Statement (statement.close()

. После этого все заработало, как и полагается. Согласно документации
Вопрос — кто сталкивался с подобной проблемой, может есть другой метод, или я что-то прогдядел в настройках ?
Метод "русского программиста" конечно работает, но все-таки остается чувство беспокойства...