|
|
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
В ентити очень много @OneToOne и @ManyToOne, хибернейт делает join с ними даже когда они не нужны. FetchLazy не помогает. Какой самый простой способ это решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 13:49 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892, FetchLazy не помогает, если ORM не может создать прокси на сущность. А прокси ORM не может создать, когда нет интерфейсов для сущностей, нет нужных либ в classpath для создания прокси без интерфейсов или такая фича отключена вовсе. О каком провайдере речь? Хибер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 14:09 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Да, а что мне надо добавить в classpath? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 14:11 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Blazkowicz, Да, а что мне надо добавить в classpath? javassist вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 14:12 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
В логах он вроде его и использует: : HHH000021: Bytecode provider name : javassist А после получения энтити никаких прокси там нет почему-то - обычные pojo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 14:38 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Тогда странно. ManyToOne должен был работать. Для OneToOne могут быть ещё ограничения http://stackoverflow.com/questions/1444227/making-a-onetoone-relation-lazy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 14:54 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Да, с optional false заработало @OneToOne. Спасибо огромное! PS А что делать если нужен null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 15:04 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Blazkowicz, Да, с optional false заработало @OneToOne. Спасибо огромное! PS А что делать если нужен null? Для nullable one-to-one ассоциаций в принципе нельзя оптимизировать через ленивую загрузку, потому что единственный способ узнать null у нас или ленивое значение это сделать выборку из обоих таблиц. И при этом смысл в ленивости отпадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 15:07 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892В ентити очень много @OneToOne и @ManyToOne, хибернейт делает join с ними даже когда они не нужны. FetchLazy не помогает. Какой самый простой способ это решить? Самый простой - вытаскивать DTO только то что вам нужно ... пишите тесты смотрите какие запросы строятся - благо тесты очень легковесные и простые https://github.com/xpinjection/hibernate-performance/tree/master/src/test/java/com/jeeconf/hibernate/performancetuning/readonly переосмыслить вашу модель еще раз . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 10:35 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 12:54 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, Это как? авторВ ентити очень много @OneToOne Это как ? Решение : вытаскивать только то что вам нужно в ридонли моде и в виде DTO чтобы не тянуть все эти @OneToOne - если у вас там дерево , как вариант к примеру сотрудников - то обычный рабочий рискует вытащить всех своих руководителей ...а те в свою очередь все необходимые им @OneToOne объекты ... в итоге имеет n+1 запрос но наоборот :) итд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 14:03 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, Так это ж ридонли + еще нужно dto городить параллельно энтити классам, а если вам нужны OneToMany там? Вручную резалтсет парсить? И это еще и без обновлений... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 14:08 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, Так это ж ридонли + еще нужно dto городить параллельно энтити классам, а если вам нужны OneToMany там? Вручную резалтсет парсить? И это еще и без обновлений... Опишите вашу модель и алгоритм работы с ней ... ?! что она из себя представляет. ИМХО идеально использовать entity только для операций сохранения(вставки объектов в БД) , все остальные операции (выборки из базы, особенно в вашей объектной модели ) - очень жесткий удар по перфомансу. И не нужно городить - используйте только dto и тащите ТОЛЬКО все что вам нужно . Используйте паттерн CQRS место Repository . Писать в стиле CQRS для JPA это и есть серебряная пуля этой технологии :) поверьте . Ибо Ваша модель entity классов - это коде ферст если вы ведете разработку через нее - нужна только для генерации базы данных , простановки констрейтов и индексов ... Использовать эти объекты в других слоях и их тем более отдавать их сразу клиенту или на view это преступление . Вы небось и OpenSessionInViewFilter используете ? Примите за правило что писать запросы все равно нужно и , поверье они будут на два порядка эффективнее чем то , через что вы будете работать если сконфигурируете свою модель через entity... К тому же у вас каждый раз используя DTO развязаны руки в определении equals hashcode contract возьмите себе немного времени и подумайте об этом . Не нужно поддаваться искушению - я ничего не буду писать - лишь опишу свою объектную модель, а ORM все будет делать за меня ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 14:56 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, если вам нужны OneToMany там? Вручную резалтсет парсить? И это еще и без обновлений... так же скинул я пример кода . если нужны пишете запрос на fetch join - других вариантов нет . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 14:57 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1 equals hashcode contract + toString() как вы будите писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 15:08 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1Используйте паттерн CQRS место Repository . эк тебя качнуло в совершенно другую ипостась. Еретик)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 15:33 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1Используйте паттерн CQRS место Repository . эк тебя качнуло в совершенно другую ипостась. Еретик)). :) а какие варианты ? тем более когда у него OneToOne ? он же указав везде FetchLazy - посто будет получать ошибку инициализации на каком то другой уровне - ближе к клиенту ... или не будет ,если у него под рукой есть сессия :) что тоже черевато :) ps в самом простом варианте для OneToOne CQRS - это когда много маленьких запросов - классов вместо одного большого "волшебного " Repository . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 18:07 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. что дает вам один универсальный метод для всего :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 18:14 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, Круто! А можешь показать, как ты вытащишь хотя-бы два вложенных списка без хибера?))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 18:23 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
авторон же указав везде FetchLazy - посто будет получать ошибку инициализации на каком то другой уровне - ближе к клиенту ... или не будет ,если у него под рукой есть сессия :) Для этого есть join fetch, правда столкнулся с тем что нельзя указать доп условие в on, через where не получится, пришлось с другой стороны графа вытаскивать. авторИспользовать эти объекты в других слоях и их тем более отдавать их сразу клиенту или на view это преступление Энтити это обычные pojo, какая разница. В чем преступление то? авторПримите за правило что писать запросы все равно нужно и , поверье они будут на два порядка эффективнее чем то , через что вы будете работать если сконфигурируете свою модель через entity... Откуда такие цифры? авторК тому же у вас каждый раз используя DTO развязаны руки в определении equals hashcode contract Они и так развязаны. авторВаша модель entity классов - это коде ферст если вы ведете разработку через нее - нужна только для генерации базы данных , простановки констрейтов и индексов ... Жееесть! Все, жду парсинг резалтсета с 2мя списками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 18:31 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
авторCQRS - это когда много маленьких запросов - классов вместо одного большого "волшебного " Repository . Ушли от n+1 и к чему пришли оказывается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 18:37 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1CQRS - это когда я просто не увидел там что то крутого. Этой технологии ведь уже лет 8? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 22:20 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892авторCQRS - это когда много маленьких запросов - классов вместо одного большого "волшебного " Repository . Ушли от n+1 и к чему пришли оказывается... почему? будет 1 запрос .... а не n+1 / если n+1 классов - то да . будет много маленьких классов ... Это как присать plsql процедуры - под каждый чих свой plsql -процедурку - типа АПИ к БД на прроцедурах. n+1 класс с запросами проще тестировать через TDD :) а один большой Repository - это попахивает Антипаттерном "Волшебный сервлет" Petro123Atum1CQRS - это когда я просто не увидел там что то крутого. Этой технологии ведь уже лет 8? наверное мы по разному видим и понимаем CQRS :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2016, 15:16 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, Круто! А можешь показать, как ты вытащишь хотя-бы два вложенных списка без хибера?))) А можно для начала модель вашу и как вы это делаете ? и тестик :) и количество sql запросов которые генерит хибер :)? ps как буду делать ( тут все зависит от тех данных что у вас и их количества , может у вас там коллекции по 10 млн обхектов): а так ну либо обычным Jpql | hql | критерия апи | нативным sql | entitygraph кстати entitygraph - настоятельно рекомендую для вашего решения :) jpa 2.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2016, 15:19 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, Круто! А можешь показать, как ты вытащишь хотя-бы два вложенных списка без хибера?))) такое решение вас устроит ? Код: java 1. 2. 3. 4. 5. 6. 7. Код: java 1. 2. 3. 4. 5. 6. 7. http://www.thoughts-on-java.org/result-set-mapping-complex-mappings/ http://www.thoughts-on-java.org/result-set-mapping-hibernate-specific-mappings/ авторПримите за правило что писать запросы все равно нужно и , поверье они будут на два порядка эффективнее чем то , через что вы будете работать если сконфигурируете свою модель через entity... Откуда такие цифры? А вы не забывайте про dirtychecking ?! или вы думаете ,что те 100500 абстракций что у вас навешаны вокруг jdbc конеекта к БД бесплатные ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2016, 15:31 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2122962]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 371ms |

| 0 / 0 |
