|
|
|
JPA (Hiber) CriteriaQuery: Eager Join or Fetch as Path
|
|||
|---|---|---|---|
|
#18+
Есть связанные сущности, например Document -> Contract -> Contractor Нужно отобрать все документы (Document) по имени Клиента (Contractor). При этом хочу сразу подгружать Контракт и Клиент (Eager). Задача тривиальная. В JPQL для этого есть 'join fetch'. Загвоздка с CriteriaBuilder. В документации Хибера есть пример : Код: java 1. 2. 3. 4. У меня ошибка кастинга при компиляции (fetch - это не join): Код: java 1. Поэтому Код: java 1. Однако у Fetch нет метода get (Fetch не Path), чтобы потом в where добавить... Увидел комментарий про Fetch тут Caution should be used in using a Fetch in the where clause as it can affect the data returned for the resulting object's relationships. Objects should normally always have the same data, no matter how they were queried, this is important for caching and consistency. This is only an issue if the alias is used in the where clause on a collection relationship to filter the related objects that will be fetched. This should not be done, but is sometimes desirable, in which case the query should ensure it has been set to BYPASS the cache. Согласен, но все же не основание, чтобы Fetch не расширял Path. Как его в where подсунуть? Нашел такие примеры , где "рекомендуют" паралельно с Join (= Path) еще и написать отдельно Fetch. Но тогда появляются дополнительные join в SQL запросе, что IMHO, совсем неправильно. Направьте на путь, пжста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2013, 10:18:52 |
|
||
|
JPA (Hiber) CriteriaQuery: Eager Join or Fetch as Path
|
|||
|---|---|---|---|
|
#18+
Неужели никто не использует QueryBuilder? Поделитесь опытом: как критерии добавляете для связанных сущностей, а потом результат отдаете клиенту. Как решаете проблему N+1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2013, 15:59:17 |
|
||
|
JPA (Hiber) CriteriaQuery: Eager Join or Fetch as Path
|
|||
|---|---|---|---|
|
#18+
Вдруг кому-ть все же интересно: Кастинг все же будет работать, если вместо вытаскивание атрибута по имени в .fetch(<атрибут>) Vladmir KУ меня ошибка кастинга при компиляции (fetch - это не join): Код: java 1. использовать метаданные как в примере от Хибера: Код: java 1. SQL генерируется красивый. "Join c" становится полноценным Path и может использоваться в where, не генерируя дополнительные SQL cross join. Всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2013, 18:16:19 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38366646&tid=2128807]: |
0ms |
get settings: |
15ms |
get forum list: |
17ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 332ms |
| total: | 475ms |

| 0 / 0 |
