|
|
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
Скажите, такой маппинг исключает проблему n+1 запроса в Hibernate: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 20:48 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНет не исключает Как быть? Убрать лишние анотации и при выборе дочерних делать запрос используя criteria, hql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 21:54 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
С одной стороны, 2 противоречащие друг другу аннотации Код: java 1. 2. 3. Было бы логично использовать 2-ю аннотацию, если бы требовалось 2 запроса: @Fetch(value = FetchMode.SELECT) - такая аннотация приводила бы к ленивому селекту из подчиненной таблицы. А тут поди угадай, что сработает. Но с другой стороны, есть документация, из которой следует, что будет 1 селект: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 09:32 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
JulTКак быть? Убрать лишние анотации и при выборе дочерних делать запрос используя criteria, hql? Я уже 100 раз отвечал на этот вопрос. Маппинг всегда Lazy. Fetch JOIN/SELECT указывается по надобности в каждом отдельном сценарии для каждого отдельного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 09:34 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
Извините, но я не совсем понимаю как это указывать в каждом отдельном сценарии. Это что, как-то "на лету", динамически менять значение анотаций, или как?(чувствую чушь какую-то спросила). Можете дать ссылку на пример или поясните, пожалуйста, подробнее. Очень хочется докопаться до сути:). А ответы ваши я конечно же поищу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 23:07 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
JulTИзвините, но я не совсем понимаю как это указывать в каждом отдельном сценарии. Это что, как-то "на лету", динамически менять значение анотаций, или как?(чувствую чушь какую-то спросила). Можете дать ссылку на пример или поясните, пожалуйста, подробнее. Очень хочется докопаться до сути:). А ответы ваши я конечно же поищу В профессии программист главный навык это умение находить информацию, вы вроде уже не первый год тут. http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-runtime If you're using HQL for your queries, you can specify your eager fetching using the "fetch" keyword, like so: from Cat as cat inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens If you're using the Criteria Query API, you can specify the fetch mode using setFetchMode List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .setFetchMode("mate", FetchMode.EAGER) .setFetchMode("kittens", FetchMode.EAGER) .list(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 23:18 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
JulT, вам просто отвечают на не заданный вопрос, тут такое бывает. На самом деле хибернейтовской аннотации Код: java 1. достаточно, чтобы при обращении главной таблице вложенные записи по умолчанию выбирались тем же селектом с использованием outer join , то есть за 1 запрос. Это и есть решение проблемы n+1. Того же можно было бы добиться, используя только JPA аннотацию Код: java 1. А вам отвечают на вопрос, можно ли это поведение как-то изменить в конкретном запросе. Да, стратегию в запросе/критерии указать можно. Но это другой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 10:45 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
ivanraвам просто отвечают на не заданный вопрос, тут такое бывает. И тут такой ivanra на белом коне. ivanra А вам отвечают на вопрос, можно ли это поведение как-то изменить в конкретном запросе. Да, стратегию в запросе/критерии указать можно. Но это другой вопрос. Да побоку на запрос. Мы понятия не имеем о маппинге ClientRole и его содержимом. Там могут оказаться и ленивые свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 10:50 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМы понятия не имеем о маппинге ClientRole и его содержимом. Там могут оказаться и ленивые свойства. В том то и дело. Зачем фантазировать и отвечать про то, что не спросили. А для конкретной связи и как она будет работать, в вопросе данных достаточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 10:58 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
ivanraЗачем фантазировать и отвечать про то, что не спросили. Зачем указывать кому-то в интернете что ему делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:01 |
|
||
|
Hibernate n+1
|
|||
|---|---|---|---|
|
#18+
чот я не понял.. надо делать чтоль всегда лейзи? т.е. нет, я помню в одной софтине сделал все игер а потом удивлялся происходящим чудесам )) в итоге перешел на вариант лейзи - для коллекций, а для "штучных" полей игер. в принципе с таким подходом вытаскивая даже лист сущностей всю базу целиком в память выгрузить случайно не выйдет. да и потом работать вполне комфортно с вытащенным объектом. если уж очень надо в детаченом объекте иметь доступ к листовым полям, тогда просто инициализирую конкретно это поле и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2016, 01:14 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39171814&tid=2124342]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 352ms |

| 0 / 0 |
