Я хочу получить идентификатор последнего вставленного значения в Hibernate.Как я могу получить последний вставленный идентификатор, используя Hibernate
После поиска:
Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Но следующий код дает мне эту ошибку:
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
Пожалуйста, поделитесь своими мыслями!
Решение
Long lastId = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Не забудьте импортировать:
import java.math.BigInteger;
Ум обмена, что вы собираетесь делать с этим ID? Как только вы получите последний идентификатор, он уже устарел; любой другой системный пользователь/поток может обновить его в таймфрейме, когда ваша переменная lastId находится в области видимости. – Gimby
Мне нужно сохранить этот идентификатор в другую таблицу как идентификатор внешнего ключа. Есть ли лучшее решение для этой ситуации? –
Да: используйте JPA правильно. Когда вы вставляете объект, идентификатор будет установлен в экземпляре объекта после его сохранения. Получите идентификатор от самого объекта, чтобы убедиться, что вы получили правильный идентификатор. Это для целей аудита или что-то еще? – Gimby