
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.12.2005, 16:49
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
После выполнения такого метода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. после tx.commit() происходит закрытие сессии. (session.isOpen() = false) , хотя явно session.close() нигде не вызывается. Как избавиться от этого ? Есть необходимость вызывать такой метод в рамках одной сесии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2005, 22:09
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Что-то не замечал, чтобы в результате tx.commit(); закрывалась сессия... этого просто не может быть. А кроме того, зачем надо использовать механизм двухфазной фиксации для того, чтобы обновить одну-единственную запись?... стрельба из пушки по воробьям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 10:34
|
|||
|---|---|---|---|
Hibernate + Session |
|||
|
#18+
М.Голованов ... механизм двухфазной фиксации для того, чтобы обновить одну-единственную запись?... Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 10:36
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
М.ГоловановЧто-то не замечал, чтобы в результате tx.commit(); закрывалась сессия... этого просто не может быть. А кроме того, зачем надо использовать механизм двухфазной фиксации для того, чтобы обновить одну-единственную запись?... стрельба из пушки по воробьям. Может и не должна - но у меня закрывается: делаю проверку в начале и конце метода так: session.isOpen(). В начале метода - true, в конце - false. По поводу зачем вызывать 2 раза: к примеру я хочу обновлять в одной сессии разные сущности (метод, как видно принимает Object). Кроме того, есть аналогичные методы для удаления и сохранения. Но все было бы прекрасно, если б после камита транзыкции сессия не закрывалась. Настройки хибернэйта стандартные. В чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 11:57
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
какие транзакции используются? jdbc, jta, ...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 12:02
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
и что у тебя в методе HibernateUtil.currentSession() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 12:08
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Я так понимаю - JDBC. Приложение работает под JBoss. hibernate-service.xml: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 12:11
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Grinya_и что у тебя в методе HibernateUtil.currentSession() ? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 13:22
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
давайте сюда полный код, при котором возникает такой эффект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 13:30
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
У вас Hibernate 3.1? А то очень похоже на его SessionFactory.getCurrentSession()... В часности он использует модель 1 транзакция - 1 сессия и обычно закрывает сессию (и jdbc соединение) после завершения транзакции. Кстати это очень не плохая стратегия и я бы советовал придерживаться именно ее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 13:46
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Проверь Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 14:07
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. У меня JBoss 4.0.2 и я использую хибернайт, интегрированный в него (3-я версия). По поводу транзакций - сори - используется JTA JBoss-а. Все настройки - по дэфолту. На счет 1 сессия - 1 транзакция: мне не совсем удобна данная стратегия. Я бы хотел 1 сессия - много транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 14:12
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Grinya_Проверь Код: plaintext 1. нет такого метода. есть тока: isOpen() isConnected() isDirty() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 14:29
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Еще встречный вопрос: Как в стратегии <1 сессия - 1 запрос> использовать ленивую(lazy) загрузку? Например есть: class Parent { Set children; ... } Если в одном запросе загрузить Parent, а потом обратиться к его getChildren() - получим эксепшен - ведь сессия то закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.12.2005, 15:13
|
|||
|---|---|---|---|
Hibernate + Session |
|||
|
#18+
AndreySerjЕще встречный вопрос: Как в стратегии <1 сессия - 1 запрос> использовать ленивую(lazy) загрузку? Например есть: class Parent { Set children; ... } Если в одном запросе загрузить Parent, а потом обратиться к его getChildren() - получим эксепшен - ведь сессия то закрыта. Угу, интересный вопрос. Есть ли кто у кого подобное выходило? Мне когдато пришлось отказацца от лейзи, благо ситуация позволяла (маааленькая такая база с мааленьким количеством записей). Помницца в прошлом топике, где поднимался этот вопрос, на него так никто и не ответил :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.12.2005, 09:32
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
AndreySerjМожет и не должна - но у меня закрывается: делаю проверку в начале и конце метода так: session.isOpen(). В начале метода - true, в конце - false. session.isOpen() == false в Hibernate 2.1.X вовсе не означает, что сессия на самом деле закрыта. Это означает лишь, что выполнен метод cleanup() (в вашем случае - в результате tx.commit() ). То есть вы можете спокойно продолжать работать в этой сессии. В Hibernate 3.X session.isOpen() == false означает, что сессия на самом деле закрыта, отсоединена от JDBC контекста и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.12.2005, 15:14
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
AndreySerj нет такого метода. есть тока: isOpen() isConnected() isDirty() метода действительно нет в интерфейсе Session, но он есть в классе SessionImpl. Если используется JTA, то тынц Note that the sessions returned from this method are automatically configured with both the auto-flush and auto-close attributes set to true , meaning that the Session will be automatically flushed and closed as part of the lifecycle for the JTA transaction to which it is associated. Additionally, it will also be configured to aggressively release JDBC connections after each statement is executed. These settings are governed by the isAutoFlushEnabled(), isAutoCloseEnabled(), and getConnectionReleaseMode() methods; these are provided (along with the buildOrObtainSession() method) for easier subclassing for custom JTA-based session tracking logic (like maybe long-session semantics). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.12.2005, 21:27
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Jozic AndreySerjЕще встречный вопрос: Как в стратегии <1 сессия - 1 запрос> использовать ленивую(lazy) загрузку? Например есть: class Parent { Set children; ... } Если в одном запросе загрузить Parent, а потом обратиться к его getChildren() - получим эксепшен - ведь сессия то закрыта. Угу, интересный вопрос. Есть ли кто у кого подобное выходило? Мне когдато пришлось отказацца от лейзи, благо ситуация позволяла (маааленькая такая база с мааленьким количеством записей). Помницца в прошлом топике, где поднимался этот вопрос, на него так никто и не ответил :( Мона использовать Lightweight Classes http://hibernate.org/41.html для того чтоб не загружать лишний мусор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2006, 12:28
|
|||
|---|---|---|---|
Hibernate + Session |
|||
|
#18+
SeonМона использовать Lightweight Classes http://hibernate.org/41.html для того чтоб не загружать лишний мусор Занятная фича, но, к сожалению, не вижу, чем она может помочь в данной ситуации :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.01.2006, 15:47
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Jozic AndreySerjЕще встречный вопрос: Как в стратегии <1 сессия - 1 запрос> использовать ленивую(lazy) загрузку? Например есть: class Parent { Set children; ... } Если в одном запросе загрузить Parent, а потом обратиться к его getChildren() - получим эксепшен - ведь сессия то закрыта. Угу, интересный вопрос. Есть ли кто у кого подобное выходило? Мне когдато пришлось отказацца от лейзи, благо ситуация позволяла (маааленькая такая база с мааленьким количеством записей). Помницца в прошлом топике, где поднимался этот вопрос, на него так никто и не ответил :( Доброго времени суток... Народ, кто-нить проясните плиз... Как использовать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.01.2006, 16:16
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Народ, кто-нить проясните плиз... Как использовать??? Объясняю - 1. использовать lazy везде где можно. При этом нужно фечить все что нужно до комита и закрытия сессии... lazy fetching для отсоединенных объектов hibernate не поддерживает 2. где надо использовать FetchMode.JOIN для Criteria Queries и LEFT JOIN для HQL-запросов. Если уверен что такая стратегия нужно всегда можно указать ее в файле маппинга (но это редко) 3. правильно использовать second-level cache. В этом случае то что зафетчено не будет перечитываться из БД постоянно. Верное использование всех 3х подходов - залог успеха в создание эффективных приложений на hibernate... L) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.01.2006, 16:54
|
|||
|---|---|---|---|
Hibernate + Session |
|||
|
#18+
funikovyuri1. использовать lazy везде где можно. При этом нужно фечить все что нужно до комита и закрытия сессии... lazy fetching для отсоединенных объектов hibernate не поддерживает 2. где надо использовать FetchMode.JOIN для Criteria Queries и LEFT JOIN для HQL-запросов. Если уверен что такая стратегия нужно всегда можно указать ее в файле маппинга (но это редко) Помницца подымался подобный вопрос касательно вебсервиса, то есть ситуация когда не известно что именно понадобицца. То есть придецца фетчить все сразу. Тогда возникает вопрос: насколько эффективнее юзать лейзи + явный фетч при каждом запросе, по сравнению с отказом от лейзи? И есть ли разница вообще(в чем)? Второй пункт, если я правильно понял, разъясняет как фетчить, то есть то, о чем говорилось в первом пункте. Поправьте, плиз, если не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 14:16
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Привет, вопрос в следующем: есть две таблицы - Customer и CustomerWebContact связь - один ко многим все это дело замаппено, в маппинге, там где <set ... прописано lazy="true" (в одном месте получается) Проблема 1: делаю так: String customer_id = "1"; Customer theCustomer = new Customer(); CustomerWebContact = new CustomerWebContact(); theCustomer = CustomerManager.getCustomer(customer_id); Set result = theCustomer.getCustomerWebContactSet(); // до этого все ок, но на следующей строчке падает System.out.println(result.size()); Пишет что сессия уже закрыта. Проблема 2: делаю так: String customer_id = "1"; Customer theCustomer = new Customer(); CustomerWebContact = new CustomerWebContact(); theCustomer = CustomerManager.getCustomer(customer_id); theCustomerWebContact.setCustomer(theCustomer); List res = theCustomerWebContactManager.findByExample(theCustomerWebContact); так вот лист res содержит ВСЕ записи из таблицы CustomerWebContact независимо от их customer_id... //т.е. метод findByExample игнорирует foreign key при поиске??? т.к. если я делаю так: theCustomer = CustomerManager.getCustomer(customer_id); theCustomerWebContact.setCustomer(theCustomer); theCustomerWebContact.setWebContactType("1"); List res = theCustomerWebContactManager.findByExample(theCustomerWebContact); // То выбирается правильно ??? Заранее благодарю за помощь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 15:32
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
приведите весь код приводящий к ошибке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 16:08
|
|||
|---|---|---|---|
|
|||
Hibernate + Session |
|||
|
#18+
Это по findByExample public class EditCustomerProfileAction extends ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { WebApplicationContext theContext = getWebApplicationContext(); CustomerManager theCustomerManager = (CustomerManager)theContext.getBean("customerManager"); CustomerWebContactManager theCustomerWebContactManager = (CustomerWebContactManager)theContext.getBean("customerWebContactManager"); HttpSession hs = request.getSession(); String customer_id = hs.getAttribute("customer_id").toString(); Customer theCustomer = new Customer(); theCustomer = theCustomerManager.getCustomer(customer_id); CustomerWebContact theCustomerWebContact = new CustomerWebContact(); theCustomerWebContact.setCustomer(theCustomerManager.getCustomer(customer_id)); List result = theCustomerWebContactManager.findCustomerWebContactByExample(theCustomerWebContact); /// !!! ТУТ ЛАЖА LIST СОДЕРЖИТ ВСЕ(!!!) ЗАПИСИ request.setAttribute("customer", theCustomer); ... ... ... return mapping.findForward(ApplicationUtilities.SUCCESS); } } CustomerWebContactManager - все замучено со Спрингом и всякими Дао... оч много приводить... главная суть в методе этом: public class HibernateBasedCustomerWebContactDao extends HibernateDaoSupport implements CustomerWebContactDao { public CustomerWebContact getCustomerWebContact(Integer aCustomerWebContactId) { return (CustomerWebContact) getHibernateTemplate().get(CustomerWebContact.class, aCustomerWebContactId); } public List getAllCustomerWebContacts() { return getHibernateTemplate().find("from CustomerWebContact"); } public void saveCustomerWebContact(CustomerWebContact aCustomerWebContact) { getHibernateTemplate().saveOrUpdate(aCustomerWebContact); } public void removeCustomerWebContact(Integer aCustomerWebContactId) { Object theCustomerWebContact = getHibernateTemplate().load(CustomerWebContact.class, aCustomerWebContactId); getHibernateTemplate().delete(theCustomerWebContact); } public List findCustomerWebContactByExample(CustomerWebContact aCustomerWebContact) { return getHibernateTemplate().findByExample(aCustomerWebContact); } /// вот ентот метод по идее должен производить поиск всех КустомерВебКонтактов с заданными полями (т.е. в моем случае с заданным объектом CUSTOMER , у которого customer_id задан) а он, редиска выдает ВСЕ записи надеюсь объяснил? могу скинуть на мыло, но там все закручено оч сильно... З.Ы. в таблице CUSTOMER_WEB_CONTACT поле customer_id - это fk для таблицы CUSTOMER... } ЕСЛИ ДЕЛАТЬ ТАК: public class EditCustomerProfileAction extends ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { WebApplicationContext theContext = getWebApplicationContext(); CustomerManager theCustomerManager = (CustomerManager)theContext.getBean("customerManager"); CustomerWebContactManager theCustomerWebContactManager = (CustomerWebContactManager)theContext.getBean("customerWebContactManager"); HttpSession hs = request.getSession(); String customer_id = hs.getAttribute("customer_id").toString(); Customer theCustomer = new Customer(); theCustomer = theCustomerManager.getCustomer(customer_id); CustomerWebContact theCustomerWebContact = new CustomerWebContact(); theCustomerWebContact.setNumName("1"); // Определять поле (НЕ FK) то следующее: List result = theCustomerWebContactManager.findCustomerWebContactByExample(theCustomerWebContact); request.setAttribute("customer", theCustomer); // работает КОРРЕКТНО(т.е. выбираются ТОЛЬКО ТЕ записи, у которых NUM_NAME=1) ... ... ... return mapping.findForward(ApplicationUtilities.SUCCESS); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2150167]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 423ms |

| 0 / 0 |
