|
|
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slippery, - DTO - это копия объекта ВНЕ хибера. Либо он есть, ЛИБО ты отсоединяешь от хибера объект. - VO и DTO и DAO можно совместить путём добавления в каждый класс TempID - Business layer-ВкладкаСохранитьDTO() это просто бизнес-метод самого верхнего уровня. У тебя без него невозможно. иначе лапша. поэтому твой вопрос ниже непонятен авторПоэтому нужен какой-то другой способ решения. способ1 - убрать везде аннотацию генерате способ2 - добавить поле TempID способ3 - добавить поле SessionID_and_TempTransaction до общей кнопки ОК минусы всех - крах целостности БД при одновременной многопользовательской работе (~100 запр.\сек.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 14:49:44 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
Да бредос полный. Даже писать ответ не хочется - до того все криво. Нельзя менять айдишники в БД, на то он и ID. Нельзя менять айдишники в Хибере, так как вы рискуете порушить кеш первого уровня, в недрах которого хранится сопоставление айдишников и соответствующей сущности. Это все от лукавого. Нужны VO со своими айдишниками и соответствующие им ентити со сгенерированными айдишниками. В противном случае получается полный трешак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:02:24 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:21:40 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
svenom, почему трешак, я не хочу ничего менять не в базе, не в хибере, если я дергаю сиквенс руками и получаю ID из базы, подставляю его в сущность и сохраняю. то все окей, правильно же, все верно и никаких нарушений!. единственное, что мешает так это аннотация @GeneratedValue. если ее убрать то все было бы по правильному в данном варианте. мне тут знакомые сказали что можно как-то либо отключить эту аннотацию для сессии, либо не учитывать в определенном случаи, но говорят, что в упор не помнят где такое видели. Вот я и спросил может кто знает хоть в сторону чего посмотреть и попробовать так сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:29:23 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:36:12 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slippery, там есть scope идентичности объектов в пределах сессии. Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД. В СУБД нету адресов. Влезать в это механизм - оверхед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:36:47 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123slippery, там есть scope идентичности объектов в пределах сессии. Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД. В СУБД нету адресов. Влезать в это механизм - оверхед. да я и не хочу влезать, просто мне сказали что можно сделать так чтоб не произошла генерация ИД, в остальном то верно же, разве нет. Какая разница, ну дерну я секвенц отдельным запросом, то что база отдаст вставлю как ИД объекта и сохраню. помоему нормальная схема, не вижу ничего в ней нарушающего. Если только знать как можно отключить этот @GeneratedValue для сущности в рантайме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 15:52:21 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slippery, пусть этим сервер занимается. "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:02:42 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slipperyPetro123slippery, там есть scope идентичности объектов в пределах сессии. Хибер гарантирует, что по АДРЕСУ 2 объекта одинаковы так-же, как и по ID в СУБД. В СУБД нету адресов. Влезать в это механизм - оверхед. да я и не хочу влезать, просто мне сказали что можно сделать так чтоб не произошла генерация ИД, в остальном то верно же, разве нет. Какая разница, ну дерну я секвенц отдельным запросом, то что база отдаст вставлю как ИД объекта и сохраню. помоему нормальная схема, не вижу ничего в ней нарушающего. Если только знать как можно отключить этот @GeneratedValue для сущности в рантаймеСкорее всего можно заэкстендиться от какого-нибудь класса и переопределить поведение генератора. Погуглите по словам "hibernate GeneratedValue turn off". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:17:45 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
svenom, - не ты ли говорил, что состояние - не проблема хибера - зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:26:57 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123svenom, - не ты ли говорил, что состояние - не проблема хибера - зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор. дело в том что если я не сделаю инсерт, то объект не попадет в выборку, в примере что я приводил в начале поста это сразу видно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:34:42 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
Да не все так страшно, на самом деле тут надо сделать кастомный генератор айди, который в случае если айди указан - сохранйет под этим айди, если не указан - генерит новый что-то вроде этого, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Вот для дальнейшего изучения - 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:43:35 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slipperyPetro123svenom, - не ты ли говорил, что состояние - не проблема хибера - зачем переопределять, если он используется только при INSERT новой записи. Пусть не делает инсерт, и не понадобится генератор. дело в том что если я не сделаю инсерт, то объект не попадет в выборку, в примере что я приводил в начале поста это сразу видно ну и дальше? - сделал инсерт, id=15 - запрос - откатил - след инсерт уже будет id=85 НИЧЕГО СТРАШНОГО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:45:41 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никсохранйет под этим айди, вопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД? - INSERT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:48:32 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
у меня был один начальник, очень не любил дырки\пропуски в id. Это оттуда? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 16:50:44 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
авторвопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД? - INSERT? Пойдет конечно же инсерт. Варианта 2, когда бы это могло быть необходимо, возможно есть еще. 1) У тебя был юзер айди = 5, ты его удалил(забанил) и т.п. Потом что-то случилось и тебе нужно восстановить именно с этим айди, ну не знаю, допустим логика завязана на айди, допустим если айди меньше 100, то это модератор, конечно лучше на айди вообще не завязываться, но вот такое бывает. 2) В рамках одной бизнес транзакции, ты создал юзера, создал ему коллекцию ченить и тп., и тебе нужен ключ, ну тоже не самый правильный вариант, но ситуация реальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:03:08 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
забыл ники тебе нужно восстановить именно с этим айди, ТАК НЕ БЫВАЕТ НИ В ОДНОЙ СИСТЕМЕ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:05:51 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
придумываем себе геморрой на смех СУБДшникам КАК БЫ УДАЛЯЕМ записи. Понарошку. Чтобы запрос сделать. Они скоро ржать будут прочитав. лучше рассмотреть такой ВИ: Клиент-злостный неплательщик id=75 - редактируем - удаляем клиента и каскадом все заказы - flush() - удалили из БД с кодом id=75 - запросы чтобы ЭТО увидеть - откат - восстановили id=75 со всеми заказами - думаем дальше в длинной транзакции что с ним делать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:07:34 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никавторвопрос - зачем сохранять под этим id. И какой запрос пойдёт в БД? - INSERT? Пойдет конечно же инсерт. Варианта 2, когда бы это могло быть необходимо, возможно есть еще. 1) У тебя был юзер айди = 5, ты его удалил(забанил) и т.п. Потом что-то случилось и тебе нужно восстановить именно с этим айди, ну не знаю, допустим логика завязана на айди, допустим если айди меньше 100, то это модератор, конечно лучше на айди вообще не завязываться, но вот такое бывает. 2) В рамках одной бизнес транзакции, ты создал юзера, создал ему коллекцию ченить и тп., и тебе нужен ключ, ну тоже не самый правильный вариант, но ситуация реальная. да у меня именно второй вариант) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:08:04 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
забыл ник, реальная ситуация - я привёл. Метод №5. Наверняка, визарды так делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:09:09 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
авторТАК НЕ БЫВАЕТ НИ В ОДНОЙ СИСТЕМЕ Громкое заявление:) Вы еще многого не видели, я соглашусь что так не бывает в ГРАМОТНО СПРОЕКТИРОВАННОЙ системе, в которой бизнес логика никак не зависит от айди. Так что 1) Бывают криво спроектированные приложения и 2)Унаследованные приложения 3) Приложения с бизнес-ключом, типа email Лично я конечно не приемлю таких действий, но уж коли понадобилось - то нужно писать кастомный генератор айди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:09:27 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
забыл ник, эт согласен :) Программист может всё. Даже id сортировку. Один чел был не доволен, что его ФИО на "Я" всё время было последним в списках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:13:48 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123забыл ник, реальная ситуация - я привёл. Метод №5. Наверняка, визарды так делают. возможно, но мне то не вариант в этом варианте нельзя юзать хибернате, ну да ладно насчет хиберната, там же надо руками писать вставку и удаление вставки, держать видимо зафиксирован объект или нет и от какой сессии(в моем случая пользователь может открыть несколько карточек в 1 сесии, так что пользователь + сессия + карточка), писать с учетом этого запросы на выборки ну и т.д. Разве я не прав? Это проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:22:54 |
|
||
|
Нестандартное сохранение сущности в hibernate
|
|||
|---|---|---|---|
|
#18+
slipperyPetro123забыл ник, реальная ситуация - я привёл. Метод №5. Наверняка, визарды так делают. возможно, но мне то не вариант в этом варианте нельзя юзать хибернате, ну да ладно насчет хиберната, там же надо руками писать вставку и удаление вставки, держать видимо зафиксирован объект или нет и от какой сессии(в моем случая пользователь может открыть несколько карточек в 1 сесии, так что пользователь + сессия + карточка), писать с учетом этого запросы на выборки ну и т.д. Разве я не прав? Это проще? так у меня задача на это не заканчивается след шаг, это прикрутка версионности с возможностью отката. Я надеюсь что тот же Envers заработает автоматом, а в 5 варианте это все руками писать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2012, 17:26:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37630994&tid=2132727]: |
0ms |
get settings: |
17ms |
get forum list: |
29ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
80ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
117ms |
get tp. blocked users: |
3ms |
| others: | 383ms |
| total: | 672ms |

| 0 / 0 |
