| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate & GenerationType.IDENTITY |
| Автор: _sten_ 19.2.2010, 20:56 | ||||||||
Есть ентити класс и замаплен:
для генирации ид используется GenerationType.IDENTITY стратегия которая оначает что ид будет пропущен в инесерте(будет сгенерирован БД через значение по умолчанию) вот DDL для таблички(PostgreSQL):
сохраняем ентити с помощью хибернета:
вот все что пишет хибернет:
(без ид) не понятно как хибернет узнает ид в последней строке... ведь ид было сгенерено базой(через сиквесн) без использования хибернета, и хибернет ни писал никаких селектов бля определения ид... |
| Автор: MaxPayneC 19.2.2010, 21:25 |
| Интересный вопрос. Возможно, прозвучит глупо, но все же спрошу - System.out.println("id: " + item.getId()); действительно выводит id созданной записи? Если да, тогда посмотрите консоль, не было ли селекта. |
| Автор: _sten_ 19.2.2010, 22:02 | ||||
| да, действительно System.out.println("id: " + item.getId()); выводит ид. из доки по Session интерфейсу:
тоесть можно сделать и так:
все что есть на консоли указано выше. |
| Автор: MaxPayneC 19.2.2010, 23:01 | ||
Все, что мне удалось найти на этот счет - это
Видимо hibernate вызывает эти функции. |
| Автор: jk1 19.2.2010, 23:03 | ||
Может быть, дело в этом:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id-enhanced |
| Автор: _sten_ 19.2.2010, 23:06 | ||
продебажил выяснил что хибернет пишет:
типа инсерт и селект вместе))) терь все стало на свои места осталось только выяснить входит ли этот RETURNING в стандарт SQL или это чисто фишка Postgre |
| Автор: MaxPayneC 19.2.2010, 23:07 | ||
Маловероятно, я три раза запускал тест, а перед третьим запуском поменял авто_инкремент на 100. |
| Автор: _sten_ 19.2.2010, 23:10 | ||
| кто то что знает об этом RETURNING? что то не могу ничего нагуглить... Добавлено через 8 минут и 22 секунды вот нашел:
значит RETURNING - это фишка чисто постгри интересно как хибернет решает эту проблему с другими СУБД |
| Автор: MaxPayneC 19.2.2010, 23:23 |
Встроенными средствами СУБД. В случае например MySQL - это мой пред-предыдущий пост, в случае Oracle если я не ошибаюсь, тоже RETURNING. |
| Автор: jk1 19.2.2010, 23:27 | ||
http://www.oracle-developer.net/display.php?id=413 Экспериментально выяснилось, что как минимум 11.1.0.6.0 эту конструкцию поддерживает |
| Автор: _sten_ 19.2.2010, 23:29 |
| спасибо, проблема решена |