|
|
|
EntityManager и другие непонятки
|
|||
|---|---|---|---|
|
#18+
это продолжение вот этой темы http://www.sql.ru/forum/actualthread.aspx?tid=924416 постю заново, потому что там название не красивое. Краткое содержание предыдущих серий. Сперва был hibernate 3.6.2 и был совсем непонятный эксепшен: java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be cast to java.lang.Long Совсем было не понятно, что это такое. Затем обновился на hibernate 3.6.10 и эксепшен изменился: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist Стало понятно, что что-то не так с EntityManager'ом или с сессией. Собственно код, который выкидывал эти исключения: Код: java 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. в дао совсем ничего нет необычного: Код: java 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. Были предложения вместо persist использовать merge, но ничего кардинльно не изменилось и записи в БД не появилялось. Я сперва решил проверить, открыта ли сессия хибернейтовская и попробовал в методы дао встроить такую штуку: Код: java 1. 2. 3. Ну как догадываются зрители, сессия была закрыта, тогда я решил в ручную открывать сессию и комитить: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. И это сработало, с маленьким ограничением: база должна быть пустой. Он почему то забывал существующие id'шники. Тогда я где-то натолкнулся на похожую проблему и там был совет изменить настройки EntityManager'а: Код: xml 1. 2. Код: xml 1. 2. Сделав так, я сумел получить такое же поведение как и с ручным открытием сессии, но вернувшись к обычному вызову getEntityManager().persist(e); Т.е. сейчас у меня нормально добавляются записи в таблицу если там нет данных. Но они там есть. Внимание вопрос, почему хибернейт забыл id'шники? Еще я от отчаяния добавил в код перед вызовом persist, такую штуку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И EntityManager у меня всегда открытый, но НЕ содержит сущности. Может это натолкнет кого на мысль. Спасибо за внимание, просто надо было выговориться и собрать в кучу все что натворил. Сейчас думаю изменить тип генератора id с identity на sequence... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2012, 09:07:38 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2132022]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
35ms |
get topic data: |
15ms |
get first new msg: |
13ms |
get forum data: |
4ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 331ms |
| total: | 493ms |

| 0 / 0 |
