powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нестандартное сохранение сущности в hibernate
25 сообщений из 59, страница 2 из 3
Нестандартное сохранение сущности в hibernate
    #37630861
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,
- DTO - это копия объекта ВНЕ хибера. Либо он есть, ЛИБО ты отсоединяешь от хибера объект.
- VO и DTO и DAO можно совместить путём добавления в каждый класс TempID
- Business layer-ВкладкаСохранитьDTO() это просто бизнес-метод самого верхнего уровня. У тебя без него невозможно. иначе лапша.
поэтому твой вопрос ниже непонятен
авторПоэтому нужен какой-то другой способ решения.
способ1
- убрать везде аннотацию генерате
способ2
- добавить поле TempID
способ3
- добавить поле SessionID_and_TempTransaction до общей кнопки ОК

минусы всех - крах целостности БД при одновременной многопользовательской работе (~100 запр.\сек.)
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37630892
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да бредос полный. Даже писать ответ не хочется - до того все криво. Нельзя менять айдишники в БД, на то он и ID. Нельзя менять айдишники в Хибере, так как вы рискуете порушить кеш первого уровня, в недрах которого хранится сопоставление айдишников и соответствующей сущности. Это все от лукавого.
Нужны VO со своими айдишниками и соответствующие им ентити со сгенерированными айдишниками. В противном случае получается полный трешак.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37630949
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,
5 вариант без DTO тебе подойдёт
11968811
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37630972
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

почему трешак, я не хочу ничего менять не в базе, не в хибере, если я дергаю сиквенс руками и получаю ID из базы, подставляю его в сущность и сохраняю. то все окей, правильно же, все верно и никаких нарушений!. единственное, что мешает так это аннотация @GeneratedValue. если ее убрать то все было бы по правильному в данном варианте. мне тут знакомые сказали что можно как-то либо отключить эту аннотацию для сессии, либо не учитывать в определенном случаи, но говорят, что в упор не помнят где такое видели. Вот я и спросил может кто знает хоть в сторону чего посмотреть и попробовать так сделать?
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37630994
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123slippery,
5 вариант без DTO тебе подойдёт
11968811

почитаю сейчас, спасибо
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37630995
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,
там есть scope идентичности объектов в пределах сессии.
Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД.
В СУБД нету адресов.
Влезать в это механизм - оверхед.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631040
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123slippery,
там есть scope идентичности объектов в пределах сессии.
Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД.
В СУБД нету адресов.
Влезать в это механизм - оверхед.
да я и не хочу влезать, просто мне сказали что можно сделать так чтоб не произошла генерация ИД, в остальном то верно же, разве нет. Какая разница, ну дерну я секвенц отдельным запросом, то что база отдаст вставлю как ИД объекта и сохраню. помоему нормальная схема, не вижу ничего в ней нарушающего. Если только знать как можно отключить этот @GeneratedValue для сущности в рантайме
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631076
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,
пусть этим сервер занимается.
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631113
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slipperyPetro123slippery,
там есть scope идентичности объектов в пределах сессии.
Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД.
В СУБД нету адресов.
Влезать в это механизм - оверхед.
да я и не хочу влезать, просто мне сказали что можно сделать так чтоб не произошла генерация ИД, в остальном то верно же, разве нет. Какая разница, ну дерну я секвенц отдельным запросом, то что база отдаст вставлю как ИД объекта и сохраню. помоему нормальная схема, не вижу ничего в ней нарушающего. Если только знать как можно отключить этот @GeneratedValue для сущности в рантаймеСкорее всего можно заэкстендиться от какого-нибудь класса и переопределить поведение генератора. Погуглите по словам "hibernate GeneratedValue turn off".
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631144
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
- не ты ли говорил, что состояние - не проблема хибера
- зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631176
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123svenom,
- не ты ли говорил, что состояние - не проблема хибера
- зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор.

дело в том что если я не сделаю инсерт, то объект не попадет в выборку, в примере что я приводил в начале поста это сразу видно
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631208
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не все так страшно, на самом деле тут надо сделать кастомный генератор айди, который в случае если айди указан - сохранйет под этим айди, если не указан - генерит новый
что-то вроде этого,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class FallbackUUIDHexGenerator extends UUIDHexGenerator {
    private String entityName;

    @Override
    public void configure(Type type, Properties params, Dialect d)
            throws MappingException {
        entityName = params.getProperty(ENTITY_NAME);
        super.configure(type, params, d);
    }

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {            
        Serializable id = session
            .getEntityPersister(entityName, object)
            .getIdentifier(object, session);       

        if (id == null)
            return super.generate(session, object);
        else
            return id;
    }
}




Вот для дальнейшего изучения -
http://stackoverflow.com/questions/5390656/manually-assign-value-to-a-hibernate-uuid
https://forum.hibernate.org/viewtopic.php?p=2420327
https://community.jboss.org/wiki/CustomSequences
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631212
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slipperyPetro123svenom,
- не ты ли говорил, что состояние - не проблема хибера
- зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор.

дело в том что если я не сделаю инсерт, то объект не попадет в выборку, в примере что я приводил в начале поста это сразу видно
ну и дальше?
- сделал инсерт, id=15
- запрос
- откатил
- след инсерт уже будет id=85
НИЧЕГО СТРАШНОГО.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631227
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никсохранйет под этим айди,
вопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД?
- INSERT?
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631234
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня был один начальник, очень не любил дырки\пропуски в id. Это оттуда?
:)
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631270
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД?
- INSERT?
Пойдет конечно же инсерт.
Варианта 2, когда бы это могло быть необходимо, возможно есть еще.

1) У тебя был юзер айди = 5, ты его удалил(забанил) и т.п. Потом что-то случилось и тебе нужно восстановить именно с этим айди, ну не знаю, допустим логика завязана на айди, допустим если айди меньше 100, то это модератор, конечно лучше на айди вообще не завязываться, но вот такое бывает.
2) В рамках одной бизнес транзакции, ты создал юзера, создал ему коллекцию ченить и тп., и тебе нужен ключ, ну тоже не самый правильный вариант, но ситуация реальная.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631278
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ники тебе нужно восстановить именно с этим айди,
ТАК НЕ БЫВАЕТ НИ В ОДНОЙ СИСТЕМЕ
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631283
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
придумываем себе геморрой на смех СУБДшникам
КАК БЫ УДАЛЯЕМ записи. Понарошку.
Чтобы запрос сделать.
Они скоро ржать будут прочитав.

лучше рассмотреть такой ВИ:
Клиент-злостный неплательщик id=75
- редактируем
- удаляем клиента и каскадом все заказы
- flush()
- удалили из БД с кодом id=75
- запросы чтобы ЭТО увидеть
- откат - восстановили id=75 со всеми заказами
- думаем дальше в длинной транзакции что с ним делать :)
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631284
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никавторвопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД?
- INSERT?
Пойдет конечно же инсерт.
Варианта 2, когда бы это могло быть необходимо, возможно есть еще.

1) У тебя был юзер айди = 5, ты его удалил(забанил) и т.п. Потом что-то случилось и тебе нужно восстановить именно с этим айди, ну не знаю, допустим логика завязана на айди, допустим если айди меньше 100, то это модератор, конечно лучше на айди вообще не завязываться, но вот такое бывает.
2) В рамках одной бизнес транзакции, ты создал юзера, создал ему коллекцию ченить и тп., и тебе нужен ключ, ну тоже не самый правильный вариант, но ситуация реальная.

да у меня именно второй вариант)
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631287
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
реальная ситуация - я привёл. Метод №5.
Наверняка, визарды так делают.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631292
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТАК НЕ БЫВАЕТ НИ В ОДНОЙ СИСТЕМЕ
Громкое заявление:) Вы еще многого не видели, я соглашусь что так не бывает в ГРАМОТНО СПРОЕКТИРОВАННОЙ системе, в которой бизнес логика никак не зависит от айди.
Так что 1) Бывают криво спроектированные приложения и 2)Унаследованные приложения 3) Приложения с бизнес-ключом, типа email

Лично я конечно не приемлю таких действий, но уж коли понадобилось - то нужно писать кастомный генератор айди.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631304
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
эт согласен :)
Программист может всё. Даже id сортировку.
Один чел был не доволен, что его ФИО на "Я" всё время было последним в списках.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631319
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123забыл ник,
реальная ситуация - я привёл. Метод №5.
Наверняка, визарды так делают.

возможно, но мне то не вариант в этом варианте нельзя юзать хибернате, ну да ладно насчет хиберната, там же надо руками писать вставку и удаление вставки, держать видимо зафиксирован объект или нет и от какой сессии(в моем случая пользователь может открыть несколько карточек в 1 сесии, так что пользователь + сессия + карточка), писать с учетом этого запросы на выборки ну и т.д. Разве я не прав? Это проще?
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631332
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slipperyPetro123забыл ник,
реальная ситуация - я привёл. Метод №5.
Наверняка, визарды так делают.

возможно, но мне то не вариант в этом варианте нельзя юзать хибернате, ну да ладно насчет хиберната, там же надо руками писать вставку и удаление вставки, держать видимо зафиксирован объект или нет и от какой сессии(в моем случая пользователь может открыть несколько карточек в 1 сесии, так что пользователь + сессия + карточка), писать с учетом этого запросы на выборки ну и т.д. Разве я не прав? Это проще?

так у меня задача на это не заканчивается след шаг, это прикрутка версионности с возможностью отката. Я надеюсь что тот же Envers заработает автоматом, а в 5 варианте это все руками писать надо.
...
Рейтинг: 0 / 0
Нестандартное сохранение сущности в hibernate
    #37631358
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slippery,
- во все запросы надо фильтр прописать where field = idSession
- вставка и удаление КАК ОБЫЧНО и сразу в БД
- что значит несколько карточек при ОДНОЙ СЕССИИ HTTP?
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Нестандартное сохранение сущности в hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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