
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
14.07.2012, 15:20
|
|||
|---|---|---|---|
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
Здравствуйте! Я пишу программу, где используется Hibernate. У меня есть пять персистентных классов, реализующих таблицы: 1) Это класс Post (Список Должностей) Код: 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. 2) Класс Person (Список людей) Код: 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. 64. 65. 3) Класс Division (список подразделений компании) Код: 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. 4) В классе EmployeeHistory хранится информация о том, когда (какого числа) какой сотрудник получил такую-то должность или когда перешёл в такое-то подразделение. Иными словами, записывает все изменения связанные с сотрудниками. Код: 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. 64. 65. 66. 5) В классе DivHistory хранится когда подразделение id стало входить в подразделение fathId (father id) Код: 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. И есть ещё класс DBManager, управляющий всем этим. Код: 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. Все действия описаны в методе main() класса DBManager. Все таблицы благополучно создаются, код конструктора класса и метод init() работаю без ошибок. Но при попытке добавить новую запись возникает ошибка " cannot simultaneously fetch multiple bags ". Трассировка ошибки, выглядит следующим образом: Exception in thread "main" org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94) at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:119) at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:71) at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:54) at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:133) at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1914) at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1937) at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:3206) at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3192) at org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:728) at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:348) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872) at com.java.summwork.dbwork.DBManager.getCurrentSession(DBManager.java:27) at com.java.summwork.dbwork.DBManager.addPost(DBManager.java:76) at com.java.summwork.dbwork.DBManager.main(DBManager.java:90) У меня есть подозрения, что это связано с моими попытками маппинга @OneToMany в классе EmployeeHistory, но может это и не так. В чём может быть эта ошибка? Есть ли способ её как-дибо разрешить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2012, 03:03
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
faceless, Прогнал ваш пример из любопытства, запись благополучно добавилась- Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Попробуйте включить автоматическое управление контекстами сеанса - Код: xml 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2012, 10:29
|
|||
|---|---|---|---|
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
Проблема вызвана тем, что у вас в классе Division несколько OneToMany c типом EAGER. Так делать нельзя, так как при этом Хибер будет пытаться вытащить одним запросом две коллекции, которые не связаны между собой, то есть по сути получится картезиан в терминах реляционной алгебры. Сделайте одну из заивисимостей LAZY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2012, 10:37
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
Проблема в том что у одного бина две One-To-Many ассоциации с FetchType.EAGER. Так как указные ассоциации не используют никаких колонок для упорядочивания, то Хибер использует для них тип Bag - неупорядоченая коллеция. А так как дефолтная реализация для EAGER это Join, то Хибер пытается сущность и обе ассоциации вычитать одним джоином. И вот тут возникает путаница. Если вы такой джоин разложите, и посмотрите на результат, то по нему нельзя однозначно определить какие FK значения какой ассоциации принадлежат. Вариантов исправить - масса. Вообще использовать FetchType.EAGER прямо в маппинге чревато. Тем более для One-To-Many, это просто дополнительная нагрузка, на уровень работы с БД, которая далеко не всегда нужна. Варианты исправления заменить JOIN Fetch на SELECT, как бы, результат тот же что и с FetchType.LAZY помеять тип One-To-Many с Bag, на List. Для этого нужно указать ещё и колонку, которую можно использовать как индекс для списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.04.2013, 22:58
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
помеять тип One-To-Many с Bag, на List. А как это сделать, и что это за параметры ? Если можно в 2х словах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.04.2013, 23:31
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.03.2014, 12:31
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
Blazkowicz, А почему одним джоином? Пишут, что двумя.Но все равно не понятно, какие проблемы с получением значений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.03.2014, 12:42
|
|||
|---|---|---|---|
|
|||
Hibernate:ошибка cannot simultaneously fetch multiple bags |
|||
|
#18+
aleXVoippА почему одним джоином? Что почему? Сконцентрируйтесь и сформулируйте полный вопрос. aleXVoippПишут, что двумя. Пусть пишут. aleXVoippНо все равно не понятно, какие проблемы с получением значений Нарисуйте несколько таблиц с двумя отношениями OneToMany в одной из них. Забейте данными. Напишите JOIN запрос на все таблицы. Посмотрите на результат и расскажите как узнать какие колонки к какой ассоциации относятся. Особо ленивые могут гуглить по тексту ошибки, я находил пару статей где на примерах с данными рассказывается в чем проблема разобрать результат запроса в отдельные объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2127451]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 505ms |

| 0 / 0 |
