Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как получить id-шник после инсерта в Hibernate  [new]
Quessir
Member

Откуда: Алматы
Сообщений: 299
Допустим, после выполнения
sessin.save(someObject);
Мне нужно получить id-шник, автоинкрементное поле в таблице, который был сгенерирован после добавления записи.

Читал в доках, нигде толком ничего не нашел.
6 июн 07, 13:30    [4236370]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
pasha701
Member

Откуда: Дніпропетровськ
Сообщений: 231
someObject.getId()
6 июн 07, 13:32    [4236393]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Quessir
Member

Откуда: Алматы
Сообщений: 299
pasha701
someObject.getId()


И как? Я его только создал. Задал только некоторые поля. ID-шника там нету, он проставляется только после приведенного выше кода.

Мне он нужен для того, чтобы потом записать второй объект. (этот id-шник fk во втором объекте).

Первый раз он записывает, а второй раз уже нет. Я хочу сохранить первый объект. Затем по ID-шнику взять его из базы, и записать второй объект.
6 июн 07, 13:40    [4236469]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
expp
Member

Откуда: spb now
Сообщений: 1240
ищи Transient Persistance в великих книгах
6 июн 07, 14:34    [4236954]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
pasha701
Member

Откуда: Дніпропетровськ
Сообщений: 231
Quessir
Я хочу сохранить первый объект. Затем по ID-шнику взять его из базы, и записать второй объект.

После сохранения Hibernate сам поставит id обекту, доставать из базі его не нужно.
sessin.save(someObject);
System.out.println(someObject.getId());
6 июн 07, 14:47    [4237059]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Кувалдин Роман
Member

Откуда: Московская область
Сообщений: 1297
Quessir
pasha701
someObject.getId()


И как? Я его только создал. Задал только некоторые поля. ID-шника там нету, он проставляется только после приведенного выше кода.

Мне он нужен для того, чтобы потом записать второй объект. (этот id-шник fk во втором объекте).

Первый раз он записывает, а второй раз уже нет. Я хочу сохранить первый объект. Затем по ID-шнику взять его из базы, и записать второй объект.


Ты вообще-то неправильно делаешь, если пользуешься ID-шником напрямую. Хибернейт при правильно прописанном маппинге без проблем сожрет и объект.

class Person{
    private Long id;
    private String fio;
    private Date birthDate;

    конструкторы, геттеры и сеттеры.
}
class Document{
    private Long id;
    private String number;
    private String serie;
    // Вот так делать можно, надо правильно описать кусок <many-to-one.../> в Document.hbm.xml
    private Person owner;

    конструкторы, геттеры и сеттеры.
}
7 июн 07, 12:58    [4242023]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
pretender
Member

Откуда:
Сообщений: 83

Мне он нужен для того, чтобы потом записать второй объект. (этот id-шник fk во втором объекте).

Первый раз он записывает, а второй раз уже нет. Я хочу сохранить первый объект. Затем по ID-шнику взять его из базы, и записать второй объект.


Если имеет место такой case, то совершенно очевидно, что Hibernate используется не верно. При правильном использовании вопросов о том, чтобы получить id одного объекта, чтобы скормить его другому объекту, не должно возникать.
7 июн 07, 15:08    [4242975]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Quessir
Member

Откуда: Алматы
Сообщений: 299
Маппинг у меня написан правильно.

Вот допустим пример кода.
Device theDevice = new Device();
Container theContainer = new Container();

theDevice.setModelId(modelId);

//вот так я решил проблему
Long generated_id = (Long) session.save(theDevice);
//заново взял тот объект
Device newDevice = (Device) session.load(Device.class, generated_id);

// deviceId у меня замапен как fk к device-у. передаем туда объект device
theContainer.setDeviceId(newDevice);

session.save(theContainer);

Когда я не выбирал объект из базы после insert(то бишь save), он не мог мне сохранить контэйнер почему-то.
7 июн 07, 16:07    [4243420]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1290
Очень советую почитать книжечку по hibernate. Чтобы понимать жизненый цикл у объектов, какие состояния жизнинего цикла бывают, как объекты в эти состояния переходят, что такое сессия, когда происходит синхронизация с БД, что такое кэш первого уровня, что такое устойчивая достижимость ... А то получиться использование jdbc через hibernate.
7 июн 07, 16:30    [4243625]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Quessir
Member

Откуда: Алматы
Сообщений: 299
Ok. Спасибо за совет!
7 июн 07, 17:13    [4244037]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как получить id-шник после инсерта в Hibernate  [new]
serega_dgl
Member

Откуда:
Сообщений: 6
Кувалдин1 Роман1
Quessir2
пропущено...


И как? Я его только создал. Задал только некоторые поля. ID-шника там нету, он проставляется только после приведенного выше кода.

Мне он нужен для того, чтобы потом записать второй объект. (этот id-шник fk во втором объекте).

+
Первый раз он записывает, а второй раз уже нет. Я хочу сохранить первый объект. Затем по ID-шнику взять его из базы, и записать второй объект.


Ты вообще-то неправильно делаешь, если пользуешься ID-шником напрямую. Hibernate при правильно прописанном маппинге без проблем сожрет и объект.


class Person{
    private Long id;
    private String fio;
    private Date birthDate;

    конструкторы, геттеры и сеттеры.
}

class Document{
    private Long id;
    private String number;
    private String serie;
    // Вот так делать можно, надо правильно описать кусок <many-to-one.../> в Document.hbm.xml
    private Person owner;

    конструкторы, геттеры и сеттеры.
}


Если имеет место такой case, то совершенно очевидно, что Hibernate используется не верно. При правильном использовании вопросов о том, чтобы получить id одного объекта, чтобы скормить его другому объекту, не должно возникать.
27 ноя 18, 12:55    [21745978]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13578
Это что за обезьяна, которая бегает по темам и копирует чужие ответы от своего имени? Еще и некрофилией занимается.
27 ноя 18, 14:23    [21746108]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
no56892
Member

Откуда:
Сообщений: 591
Hett,
Без Blazcowicz раздел загибается)
28 ноя 18, 00:13    [21746731]     Ответить | Цитировать Сообщить модератору
 Re: Как получить id-шник после инсерта в Hibernate  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1092
no56892,

а где Блазгович?
28 ноя 18, 06:50    [21746766]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить