|
|
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Собственно, практикуете ли вы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 10:55:25 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Generic DAO - да. Что значит Hibernate Based - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 11:00:10 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я вот написал абстрактный DAO: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Теперь типа делаем реализацию основанную на Hibernate: Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 14:47:09 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaks, За такое старшие товарищи и втык могут сделать. Код: java 1. 2. 3. 4. 5. Во-первых копипаст наше всё. Да? Во-вторых если нам вдруг надо две операции внутри одной транзакции провернуть, что куда нам идти с такими нуждами? И сессия пересоздаётся и закрывается на каждый пук? В-третих .close() и не в finally блоке. Что с в случае Exception будет? И в-четвертых уже даже спринговый AbstractHibernateDAO считается deprecated. А вы его криво изобретаете заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 14:56:12 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Гоню. HibernateDaoSupport в Spring-е оно называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 14:58:17 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 14:58:55 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
А ещё рекомендую посмотреть Spring Data для JPA. http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/jpa.repositories.html#jpa.sample-app.finders.strategies Возможность писать заросы методами, просто выносит мозг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:15:55 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Да на скорую руку же) Конечно же это не продакшн код) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:18:49 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaksДа на скорую руку же) Конечно же это не продакшн код) Отмазка не канает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:21:29 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
На самом деле продакшн код был еще хуже. У вас какой подход используется ? Spring DATA +JPA? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:31:04 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaksНа самом деле продакшн код был еще хуже. Ну, в самом херовом продакшн коде я кого хочешь за пояс заткну. У меня тут есть один проектик 3й год на саппорте... scymaksУ вас какой подход используется? У меня все проекты довольно старые, использовали, в основном, код аналогичный этому: 14516904 и HiberateDaoSupport. scymaksSpring DATA +JPA? А это я видел в одном новом проекте. Вызывает смешаные чувства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:42:06 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Так а что же вы порекомендуете как best practices? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:43:48 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaksТак а что же вы порекомендуете как best practices? http://stackoverflow.com/questions/5104765/hibernatedaosupport-is-not-recommended-why http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-hibernate-straight ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:45:46 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Тут, кстати ещё одна интересная тема есть. http://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns То что сейчас называют DAO, уже достаточно давно не DAO, а Repository. Задача DAO - инкапсулировать работу с базой данных. В основном, CRUD. http://www.martinfowler.com/eaaCatalog/dataMapper.html Но CRUD уже инкапсулирован в ORM. Поэтому Hibernate DAO это уже фактически Repository http://martinfowler.com/eaaCatalog/repository.html Этот паттер инкапсулирует запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:51:18 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: java 1. 2. Код: 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. + добавить Transactional Manager и всё? Это есть Best Practices? Или я неверно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 15:56:43 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaks, Таки без копипаста вообще никак? sessionFactory.getCurrentSession() стоило оформить в отдельный метод. Инкапсуляция наше всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 16:05:10 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, да, надо бы выделить метод. Ну а так , да? Добавить декларативное описание транзакций и всё? А если нужны какие-нибудь хитрые запросы, тогда нужно создавать Query и просто исполнять его, без закрывания сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 16:15:37 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaks Добавить декларативное описание транзакций и всё? Да. Только надо понимать что Repository не управляет транзакциями. Транзакции привязаны к бизнес-логики. Репозиторий просто глобально можно пометить транзакционным на всякий случай. scymaks А если нужны какие-нибудь хитрые запросы, тогда нужно создавать Query и просто исполнять его, без закрывания сессии? "Хитрость запросов" никак не связана с тем когда нужно закрывать сессию. Задача сессии отслеживать все изменения, а не "хитрые запросы". http://martinfowler.com/eaaCatalog/unitOfWork.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 16:24:11 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, То есть получается Repositories - классы необходимые для персистенции данных (сохранение данных в БД, обновление данных в БД, удаление данных из БД, загрузка данных из БД), а Services это классы, которые выполняют бизнес логику, на которую и нужно навешать Transactional? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 16:33:10 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaksBlazkowicz, То есть получается Repositories - классы необходимые для персистенции данных (сохранение данных в БД, обновление данных в БД, удаление данных из БД, загрузка данных из БД), а Services это классы, которые выполняют бизнес логику, на которую и нужно навешать Transactional? По Фаулеру немного не так. "сохранение данных в БД, обновление данных в БД, удаление данных из БД, загрузка данных из БД" - это CRUD. Реализуется как DOA(DataMapper) или, в нашем случае - ORM. Repository - это сложные запросы. CRUD просто для удобства делается через него же. Но Repository не реализует CRUD. Service у Фаулера так и называется - Transaction Script. Так как его назначение это реализация бизнес-транзакций. Основной побочный эффект Transaction Script в том что разработчики забывают что какую-то логику можно и нужно инкапсулировать в Domain Model Entity. И в результате получается Anemic Domain Model, когда Transaction Script реализует сложные манипуляции со свойствами сущности, вместо того чтобы просто вызвать метод этой сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 16:43:25 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, большое спасибо за помощь! Код: 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. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вот так получилось? Так уже лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 18:02:19 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaks, а в чем отличие от вашего первого варианта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 18:58:45 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
javapecker, Ну как же?! Транзакции сами открываются и завершаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 19:11:57 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
scymaks, то что транзакции сами это круто, но у вас методы дао транзакционные, так что принципиальной разницы с первым вариантом нет, и главная проблема осталась: Blazkowicz Во-вторых если нам вдруг надо две операции внутри одной транзакции провернуть, что куда нам идти с такими нуждами? И если нужно только автоматическое управление транзакциями, достаточно использовать динамик прокси, и не таскать за собой спринг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 19:25:44 |
|
||
|
А вы используете Hibernate Based Generic DAO?
|
|||
|---|---|---|---|
|
#18+
javapecker, эм.. нет проблемы. вот такой код нормально отработал: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. или вы не об этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2013, 20:17:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38319462&tid=2129041]: |
0ms |
get settings: |
12ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
52ms |
get topic data: |
19ms |
get forum data: |
3ms |
get page messages: |
121ms |
get tp. blocked users: |
3ms |
| others: | 295ms |
| total: | 537ms |

| 0 / 0 |
