|
|
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Не знаю, что произошло. Раньше вроде нормально делал session.save(), а вот сегодня почему то Вытащил вот этот exception. Если я правильно понял, то там че-то неладное с sequence-ами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 19:24:47 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
стектрейс и эксплоит. или вас кусок жабодока интересует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 10:23:29 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
exppстектрейс и эксплоит. или вас кусок жабодока интересует? нет-нет Вот последнее, что слелал Hibernate. Hibernate: select nextval ('public.container_sequence') Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. И кусок кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 14:23:23 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
думаю так Код: plaintext Код: plaintext делает getSession().get(generated_id)) ну и нужно определиться Код: plaintext и вообще - всё переделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 14:33:45 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
а мне странно beginTransaction один, а комита два... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 14:46:24 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
exppдумаю так Код: plaintext Код: plaintext делает getSession().get(generated_id)) ну и нужно определиться Код: plaintext и вообще - всё переделать. Да нет. Это нормально. Я просто до этого комментил некоторые места. там вот так: public void addContainer(String barcode, int devTypeId, Long modelId, Long personalId, String cabinet) { Session session = HibernateUtil.getCurrentSession(); Transaction transaction = session.beginTransaction(); try { Device theDevice = new Device(); Model theModel = new Model(); Container theContainer = new Container(); Personal thePersonal = new Personal(); thePersonal.setId(personalId); theDevice.setBarcode(barcode); theDevice.setModel(theModel); theDevice.setCharged(0); Long generated_id = (Long) session.save(theDevice); transaction.commit(); Device newDevice = new DeviceManager().getDevice(generated_id); theContainer.setPersonal(thePersonal); theContainer.setDevice(newDevice); theContainer.setCabinet(cabinet); session.save(theContainer); transaction.commit(); } catch (HibernateException ex) { throw ex; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:00:01 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Блин сорри. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:01:00 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
vas0а мне странно beginTransaction один, а комита два... Это я сначала записал один объект. Потом взял id-шник от этого объекта. И затем записал второй объект. [quot expp]и вообще - всё переделать.[/expp] А как? Можно несколько советов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:03:19 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
а чем отличаются theDevice от newDevice? у тебя проблемы начались случайно не с того, что ты с generator с "increment/native" на сиквенсы перевел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:10:06 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
vas0а чем отличаются theDevice от newDevice? у тебя проблемы начались случайно не с того, что ты с generator с "increment/native" на сиквенсы перевел? :) Почти. Правда я недельку где-то прекрасно добавлял и удалял данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:11:34 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
ты еще на первы вопрос не ответил. нельзя newDevice не доставать а использовать theDevice? PS: и использовать комитов больше чем транзакций начинаешь как то неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:14:41 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
vas0ты еще на первы вопрос не ответил. нельзя newDevice не доставать а использовать theDevice? PS: и использовать комитов больше чем транзакций начинаешь как то неправильно Потому что, когда я использовал theDevice, он мне говорил, что такой объект уже есть, и я не могу поверх него писать. Поэтому, я сначала записывал его, а потом заново доставал. А есть варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:25:02 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
2 vas0 А что насчет сикуенсов? Проблема в них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 15:49:15 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
эх... советовал я тебе когда то книжку почитать. ладно пару слов по hibernate скажу, если что то буду 3.14здеть то сильно не пинайте (я hiber у себя на работе не использую). во первых session, это патерн "Unit of Work" (единица работы у Фаулера), фактически три коллекции объектов: 1. Только что добавленные, для них нужно выпольнить sql insert 2. Обновленные, для них нужно выполнить sql update 3. Удаленные для них нужно выполнить sql delete. Синхронизация сессии с БД происходит не сразу, поэтому: session.save != sql insert (insert будет выполнен, но фиг знает когда) Мне кажется что проблемы у тебя не было когда ты использовал generator native. При таком варианте hibernate выполняет типа (select max(id) from table ) и потом это значение использует и у тебя нормально работает метод: Код: plaintext но на сиквенсах такая штука не отрабатывает нормально. авторПотому что, когда я использовал theDevice, он мне говорил, что такой объект уже есть, и я не могу поверх него писать. Поэтому, я сначала записывал его, а потом заново доставал. А есть варианты? У session есть такой отличный метод saveOrUpdate. Если сохранять объекты через этот метод, то если у объекта getId != null, то будет insert иначе update. PS: как то кажется что неправильно ты hibernate используешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:00:41 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
vas0эх... советовал я тебе когда то книжку почитать. ... PS: как то кажется что неправильно ты hibernate используешь эх... знаю. :-( да некогда в подробности углубляться. Но что же тогда делать? Все согласятся, что использовать sequence по-умолчанию для всех таблиц - это гон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:16:41 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
вот эти три строчки удали Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:22:00 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Пробовал. То же самое. Так мне не надо сохранять theDevice? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:35:23 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
я тут попробовал Код: plaintext авторПробовал. То же самое. Так мне не надо сохранять theDevice? судя по тому что писал выше у тебя каскадное сохранение в мапинге стоит и когда сохраняешь container автоматом сохраняеться и device. Так что его можно не сохранять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:44:33 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Зачем ты вот это делаешь? Этот id-к ты как получаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:51:59 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Да у меня cascade. Но стоит no action. Это все равно? он мне в любых вариациях выдает этот эксепшн. Если очистить базы(удалить и создать заново), то это заставит его номально работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:54:48 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
vas0 Код: plaintext 1. 2. Зачем ты вот это делаешь? Этот id-к ты как получаешь? Я его у себя в программе беру. Ну типа, ГУИ. Юзер выбирает их Комбо на кого он хочет записать устройство(новое, которое мне тоже нужно записать в базу). У меня в контайнере personalId как fk стоит. Поэтому хибер требует не int-овский(или Long-овский) personalId, а объект Personal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:57:31 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Это объект который уже есть базе? попробуй так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:10:53 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Да. Но проблема не в этом. Как видите, он слетает когда вытаскивает sequence из базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:17:11 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
похоже у тебя не разруливается каскадное сохранение где - то. Опять же на будущее. Если у тебя есть id (и ты знаешь что у тебя такой объект есть в базе) а тебе нужен объект, то ползуйся методом session.get. Этот метод в базу не лезет, а создает proxy у которого выставлен только id, при этом объект будет загружет после первого обращения к его полям (вызова какого то getter). Так же у сессии есть метод load, этот метод сразу лезет в базу чтобы проинициализировать объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:34:50 |
|
||
|
org.hibernate.TransientObjectException
|
|||
|---|---|---|---|
|
#18+
Ура!!! Решилась. Посмотрел где-то в мануале про cascade="save-update". До этого ставил его, но видать не в том месте. Теперь прописал его в контейнере и он заработал. Код: plaintext 1. 2. 3. Раньше стояло cascade="none". 2 vas0: Огроооомный респект!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:38:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34611033&tid=2145344]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 311ms |
| total: | 476ms |

| 0 / 0 |
