![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Andrey1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Что нужно изменить/добавить, чтобы автогенерировались id для новых элементов при сохранении нового объекта object:
id в entity классе для object:
База - Оракл. Это сообщение отредактировал(а) Andrey1 - 28.4.2008, 16:38 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
||||
|
|||||
Zamuta |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Andrey1,
Не знаю, что поддерживает оракл, но это должно работать.
-------------------- Thank you opensource. |
||||
|
|||||
Andrey1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Спасибо. Тоже думал, что это должно работать, однако - не работает...
![]()
Если заменить на @GeneratedValue(strategy=GenerationType.IDENTITY), то результат тот же, но ошибка другая:
Здесь http://java.sun.com/developer/technicalArt...persistenceapi/ еще пишут, что можно писать аля:
, но разницы нет. Это сообщение отредактировал(а) Andrey1 - 28.4.2008, 17:35 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
||||||
|
|||||||
medi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 1.4.2008 Где: Германия Репутация: нет Всего: нет |
не знаю как TopLink, но в hibernate
@GeneratedValue(strategy=GenerationType.IDENTITY) говорит о том, чтоб при генерации id использовать механизмы базы данных. Для этого испильзуется sequence, которые есть в базе для каждой таблици(с PrimaryKey (AUTO_GEN)) У тебя, TopLink запрашивает этото, но видемо не находит. Call: SELECT SEQ_GEN_SEQUENCE.NEXTVAL Проверь как называется имя sequence в базе, или может там вообще нету секуэнса для ID |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Я его ручками не вызывал... -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
medi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 1.4.2008 Где: Германия Репутация: нет Всего: нет |
Что ты ручками не вызывал?
|
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
-------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
medi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 1.4.2008 Где: Германия Репутация: нет Всего: нет |
я не говорю, что ты его писал, это делает O/R-mapper.
У тебя в таблице поле OBJECT_ID как PrimaryKey? Добавлено через 2 минуты и 51 секунду я пишу "называется", а ты наверно вызывается прочитал? будь внимателен ![]() |
|||
|
||||
Ivan Kolesnikov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 1 Всего: 6 |
Фактически у нас имеется 3 метода получения id: TABLE, SEQUENCE, or IDENTITY и еще AUTO - который как я понимаю выбирает подходящую реализацию в зависимости от базы, в данном случае, судя по ошибке, была выбрана TABLE.
Что конкретный метод обозначает: TABLE - должна быть таблица по умолчанию с именем SEQUENCE и двумя полями SEQ_COUNT и SEQ_NAME, соответственно следующее значение ID и идентификатор генератора (не помню какой значение), имя таблицы и имена полей можно настроить. Как я понимаю этот метод удобно использовать в СУБД в которых нет SEQUENCE. SEQUENCE - для генерацию используется SEQUENCE, в данном случае с именем SEQ_GEN_SEQUENCE, опять же имя можно настроить, как я понимаю для Oracle этот способ больше подходит, только нужно указать правильное имя SEQUENCE из которого брать этот ID. IDENTITY - данный метод на сколько я знаю не поддерживается в Oracle и используется вместо него SEQUENCE, суть его заключается в том, что некоторые СУБД например MySQL позволяют получить после выполнения запроса значения идентификатора установленного в поле id, типа кажется auto_increment. Что выбрать в данном случае. Если для генерации ID используется SEQUENCE, а так скорее всего и есть, то нужно выбирать этот метод, но тут есть один момент: часто id проставляется в триггере из сиквенса автоматом, в данном случае это приведет к ошибке, так как будет будет добавлена запись не с тем id что передали. Необходимо изменить триггер, чтобы если id уже заполнено, то не изменять его. Установить нужно имя сиквенса можно следующим образом
--------------------
|
|||
|
||||
medi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 1.4.2008 Где: Германия Репутация: нет Всего: нет |
Хорошая инфа, спасибо...
|
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Спасибо.
Пришлось создать табличку SEQUENCE c столбцами: SEQ_COUNT, SEQ_NAME, и внести в нее: 1, SEQ_GEN. Странно, почему topLink не догадался это сделать, если она ему так нужна... -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
Ivan Kolesnikov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 1 Всего: 6 |
Про topLink не знаю, с ним не работал, я использую реализацию hibernate, там можно через свойства указать нужно ли создавать или обновлять объекты, по умолчанию они не создаются. --------------------
|
|||
|
||||
EJack |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |