|
|
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Добрый день. Экспериментирую с JPA (Hibernate) и столкнулся с поведением, которое я не могу классифицировать: либо я действую в правильном направлении, но делаю неправильно, либо я пытаюсь делать то, что никто не делает, либо это косяк хибернейта. У меня есть несколько связанных различными видами отношений моделей. Для того, чтобы минимизировать количество запросов при получении объекта со всеми связями я не нашел более удачного решения, чем использовать EntityGraph (если есть другое решение прошу показать пальцем). Этот механизм великолепно работает, но только до тех пор, пока я не пытаюсь сделать NamedQuery, который бы использовал этот граф. Он просто отрабатывает, как будто никакой хинт в запрос не передается. Вот модели Код: 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. 101. 102. 103. Вот этот код дает один запрос Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. А вот этот два Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. то есть хинт не работает. И как тут быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 13:11 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
А с HINT_FETCHGRAPH поведение такое же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 13:27 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядькаА вот этот два А почему не N+1? Один департамент в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 13:32 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ничего не меняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 13:33 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЛысый дядькаА вот этот два А почему не N+1? Один департамент в БД? Да, это тестовые данные. Я пробовал на других схемах, где больше данных, там получается N+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 13:35 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядька, Похоже на багу. Если только вы где-нибудь опечаток не наделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 14:28 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
В общем и целом получается, что аннотации хибернейта не вполне выполняют контракт JPA вот код из Хибернейта Код: 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. Тут нет метода hints, в то время как в JPA он есть Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:20 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядькаВ общем и целом получается, что аннотации хибернейта не вполне выполняют контракт JPA А они и не должны. Аннотации хибера к JPA отношения не имеют. Нужен контракт JPA - пользуешься аннотациями JPA. Я тоже было подумал, что где-то в коде Hibernate аннотации затесались. Но, вроде, нет. Весь маппинг на JPA ведь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:30 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЛысый дядькаВ общем и целом получается, что аннотации хибернейта не вполне выполняют контракт JPA А они и не должны. Аннотации хибера к JPA отношения не имеют. Нужен контракт JPA - пользуешься аннотациями JPA. Я тоже было подумал, что где-то в коде Hibernate аннотации затесались. Но, вроде, нет. Весь маппинг на JPA ведь? Маппинг на JPA, но сам факт, что аннотация из Хибернейта не знает о таком методе, наводит на мысль, что хибернейт его не поддерживает. Впрочем, техподдержка уже признала косяк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:35 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядькапрочем, техподдержка уже признала косяк. Я сходу тикета не нашел в трекере. Хотя не так уж и усердно искал. Номер не дали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:38 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЛысый дядькапрочем, техподдержка уже признала косяк. Я сходу тикета не нашел в трекере. Хотя не так уж и усердно искал. Номер не дали? https://forum.hibernate.org/viewtopic.php?f=1&t=1044821 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:39 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядька https://forum.hibernate.org/viewtopic.php?f=1&t=1044821 Пфф. Так это они ничего не подтвердили. Перевожу: "Может быть и бага. Заведите тикет с полноценным тестом, если хотите чтобы кто-то из разработчиков посмотрел". Я бы в первую очередь подебажил бы код Hibernate. Это же opensource проект. И исходники там вменяемые. К тому же если вы в тикете ткнете в конкретный класс, который они провтыкали или даже патч приложене, то вероятность скорого исправление вырастет очень сильно. Но меня очень удивит если это окажется багой. Потому как хинты, вроде, давно в JPA. И сценарий простейший. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:49 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Если представителю разработчика насрать, то мне тем более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:56 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Меня другое беспокоит. Неужели никто не создает именованных запросов на основе графов? Ну иначе бы проблема была известной. А как тогда делают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:58 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядькаЕсли представителю разработчика насрать, то мне тем более. Я посмотрел исходники. Подтверждаю - бага есть. org.hibernate.cfg.annotations.QueryBinder перекладывает данные запроса из JPA аннотации в NamedQueryDefinitionBuilder/NamedQueryDefinition. И ни в одном из этих классов нет хинтов FETCH/LOAD. В JIRA тоже постить не буду, потому что эти меньшинства нас забанили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 13:12 |
|
||
|
JPA @NamedQuery + @NamedEntityGraph
|
|||
|---|---|---|---|
|
#18+
Лысый дядькаМеня другое беспокоит. Неужели никто не создает именованных запросов на основе графов? Ну иначе бы проблема была известной. А как тогда делают? Я сам в а.уе. EntityGraph это, ИМХО, одно из важнейших достижений ORM в нынешний период застоя. Но багу не встречал, возможно, потому что сам делаю вот так: Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39519796&tid=2122599]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 337ms |

| 0 / 0 |
