powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate_sequence + spring jdbc
25 сообщений из 36, страница 1 из 2
hibernate_sequence + spring jdbc
    #38962823
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

Есть приложение, работает через хибернейт, соответственно при начале его работы в бд postgresql была создана последовательность hibernate_sequence от которой все инсерты и пляшут.
Сейчас пишу дополнительно приложение, на свинг, которое работает с базой используя spring jdbc.
Не знаю как написать инсерт, чтобы поле id у нового объекта заполнялось учитывая хибернейтовский сиквенс, да еще и меняло его.
Можно сгенерировать id самому, но ведь будет попа если при этом не будет меняться основная, хибернейтовская, последовательность.
Что посоветуете?

есть масса примеров в сети, допустим здесь , как писать инсерты, но что-то у меня не выходит...
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962827
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во многих местах видел, что сначала выполняется инсерт, а затем вставленной строке присаивается id, примари кей.
Но у меня выдает ошибку, что id не может быть null. Что логично.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962830
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем пишется примерно следующее в интернетах:
Postgresql, get generated sequence after insert with JDBC

Почему AFTER insert, когда надо id присвоить до вставки... :)
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962868
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А все, вопрос больше к постгресу относился, примерно такой код должен быть, на тестовой табличке сработал.
Код: java
1.
2.
3.
4.
5.
6.
String sql = "insert into users(id, visibleName) values (nextval('hibernate_sequence'), 'блаблаюзер')";
        try (Connection c = pool.getDataSource().getConnection()) {
            try (Statement ps = c.createStatement()) {
                ps.executeUpdate(sql);
            }
        }
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962869
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда без спринга, но раз уже "нашелся"
nextval('hibernate_sequence')
то дальше не сложно
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962885
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicпричем пишется примерно следующее в интернетах:
Postgresql, get generated sequence after insert with JDBC

Почему AFTER insert, когда надо id присвоить до вставки... :)

наверно потому что если делать наоборот то получите объект с уникальным Id но которого еще нет в БД.
желаемый же результат обычно, либо получить объект с уникальным id и соотвествующей записью в БД либо выкинуть ошибку.

nextval('hibernate_sequence') -- это по умолчанию последовательность создаваемая hibernate(если явно не было указано наименование последовательности). если Insert-ов не будет ну ооооочень много то этого вполне достаточно.

но можно для каждой сущности создать отдельную последовательность только на @Id надо прописать наименование последовательности.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962887
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicЕсть приложение, работает через хибернейт, соответственно при начале его работы в бд postgresql была создана последовательность hibernate_sequence от которой все инсерты и пляшут.

Не надо пускать присвоение ID на самотёк. А то потом придётся много плакать. Нескоро, как раз когда всё менять будет очень тяжело.
Отдельный метод "дай мне ID", и вызывать его ПЕРЕД вставкой.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38962891
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпричем пишется примерно следующее в интернетах:
Postgresql, get generated sequence after insert with JDBC

это в контексте например вашего же запроса
Как получить id Только что вставленной записи в таблицу users ?
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38963243
Dim666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingКак получить id Только что вставленной записи в таблицу users ?В Postgres-е: "insert into users ... returning id;".
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38963382
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim666llemingКак получить id Только что вставленной записи в таблицу users ?В Postgres-е: "insert into users ... returning id;".

Я просто хотел подчеркнуть это топикстартеру почему такой вопрос часто возникает. Его пример не слишком удачный что бы это подчеркнуть.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38963610
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База пашет уже 2 года, сиквенс перевалил уже за 780000.
Получается, что сейчас лучше сделать пару последовательностей ручками в табличках, куда более менее много записей падает?
Или лучше сделать это на уровне хибернейта, а вторым приложением просто использовать их?
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38963619
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

я просто немного не понял, почему всё пущено на самотек, ведь последовательность срабатывает каждый раз...
в чем могут быть проблемы в дальнейшем?

у этой последовательности максимум это 9223372036854775807
а сейчас текущее значение всего 780000+
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38963795
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicAlexey Tomin,

я просто немного не понял, почему всё пущено на самотек, ведь последовательность срабатывает каждый раз...

Проблема будет не в этом. А том, например, что где-то будет надо узнать ID до вставки в БД. Например если есть циклические ссылки. Или логирование хитрое. Да мало ли что.

Или ещё вишенка на торте. Если вы включаете ID в хэш-код и equals (а иногда без этого никак), то после insert объект уже другой. А вставка (и генерация ID) может пройти незаметно для этого закоулка кода. И что тут будет- лучше не знать на опыте.

Nixicв чем могут быть проблемы в дальнейшем?

у этой последовательности максимум это 9223372036854775807
а сейчас текущее значение всего 780000+

Ну это-то мелочь. Как раз предгенерация ID ведёт к "лишнему" расходованию ID - мало ли почему вставка не прошла, а ID-то уже взяли.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964049
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
Ну это-то мелочь. Как раз предгенерация ID ведёт к "лишнему" расходованию ID - мало ли почему вставка не прошла, а ID-то уже взяли.

в Postgresql генереция sequence вне транзакции идет. Разницы нет получить из БД след. id и вставить в users, или вставить в users а postgresql сам сгенерирует id.
В любом случае
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964052
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае при ошибке sequence будет увеличится на 1.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964107
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingВ любом случае при ошибке sequence будет увеличится на 1.

Если ты вставляешь по одной записи за раз- да.
А если надо вставить клубок из 10ка записей, а на первой вставке ошибка, то твой вариант "потратит" 1 ID, а мой- 10.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicСейчас пишу дополнительно приложение,
если много \ разных приложений к БД, то чем глубже назначение ID, тем лучше (триггер самой БД).
Отсюда и плясать, т.к. целостность данных наше всё!
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. В 12-том оракле появился тип поля - счётчик
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964312
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NixicСейчас пишу дополнительно приложение,
если много \ разных приложений к БД, то чем глубже назначение ID, тем лучше (триггер самой БД).

Да, да- больше ада!
Ещё раз- когда сущность внезапно меняет свой ID - это нехорошо. Это может вылезти боком.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964320
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЕщё раз- когда сущность внезапно меняет свой ID - это нехорошо. Это может вылезти боком.
с чего она сменит пол ID?
Хибер по ID и определяет сущность.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964368
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Alexey TominЕщё раз- когда сущность внезапно меняет свой ID - это нехорошо. Это может вылезти боком.
с чего она сменит пол ID?
Хибер по ID и определяет сущность.

У тебя в java-коде.
Было entity.getId() == null, а потом вдруг entity.getId() == 123. Вот счастье, да?
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964389
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
ты полный кейс приведи, если не лень.
С чего у меня так будет?
Давай не путать когда 2-ое приложение лезет в обхход хибера и где назначать счётчик.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964443
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ты полный кейс приведи, если не лень.
С чего у меня так будет?
Давай не путать когда 2-ое приложение лезет в обхход хибера и где назначать счётчик.

Entity entity = new Entity(); //entity.id == null
передали в какой-то другой сервис, тот значение сохранил.
em.insert(entity); // А теперь entity.id != null
передали в тот же сервис, тот сравнивает- значение другое (т.к. id другой).
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964464
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominEntity entity = new Entity(); //entity.id == null
передали в какой-то другой сервис, тот значение сохранил.
- отсоединять объект от сессии хибера нельзя
- сессия хибера должна быть как можно короче, напр 0,01 сек.
Отсюда твой пример не верен.
- либо закрой сессию и получишь ID.
Либо отсоедини от сессии и тогда объект обезличен.
...
Рейтинг: 0 / 0
hibernate_sequence + spring jdbc
    #38964468
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
при передаче объекта в рамках одной сессии ( в памяти), хибер гарантирует идентичность объектов.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate_sequence + spring jdbc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]