|
|
|
java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be c
|
|||
|---|---|---|---|
|
#18+
используется: hibernate 3.6.2, maven 2, postgres 9. По идее код должен быть рабочий, но он, сюрприз-сюрприз, не работает. Когда запускаю функциональные тесты получаю ошибку: java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be cast to java.lang.Long Код - это стандартная доменная модель, вызов также не представляет чтото страшного: Entity: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. etc... DAO: Код: 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. 31. 32. 33. 34. etc... And according table: Код: 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. Вот стек до нашего кода: Код: 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. 31. 32. 33. Бага хибернейта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 10:17:12 |
|
||
|
java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be c
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что постгрес плохо работает с identity генератором. и полями bigserial, сам не сталкивался, но знакомые на что-то такое натыкались, вроде не бага хибернейта, или хз, в общем в интернете много статей - вы более в теме, поищите. Это если для объяснения, а для того чтобы пофиксить, может просто перейти на сиквенс генератор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 15:11:58 |
|
||
|
java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be c
|
|||
|---|---|---|---|
|
#18+
снова поднялся этот вопрос. Но теперь я изменил версию хибернейта и ошибка стала более логичной. org.hibernate.PersistentObjectException: detached entity passed to persist: com.nxsystems.simulator.denarii.domain.DenariiCurrency Очевидно, что дело в закрывшейся сессии Хибернейта. По документации написано, что, вызвав мердж, сессия вновь будет открыта и объект станет persistent. Мердж не помог. тогда я где-то нарыл что вызвав в прнудилвку flush решит проблему. Поставил flush и он сказал, что No transaction in progress. Тогда я попробовал обернуть это дело в такую порнушку: // getEntityManager().getTransaction().begin(); getEntityManager().flush(); // getEntityManager().getTransaction().commit(); Опять неудача, сказало что нельзя так делать, когда пользуешься спрингом, мол используйте аннотацию @transactional. Убрал закоментаренное, понатыкал везде где можно @Transactional, но вновь no transaction in progress. Понятно что глюк с конфигурацией теста, потмоу что на продакшене это работает. НО другие то тесты работают, для других классов. Короче wtf? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2012, 03:04:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37694754&tid=2132033]: |
0ms |
get settings: |
14ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
51ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
76ms |
get tp. blocked users: |
3ms |
| others: | 452ms |
| total: | 650ms |

| 0 / 0 |
