|
|
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, автор1)Про update - ставите @DynamicUpdate(true) - будет обновлять только одно поле ... но... но ..нужно понимать в каких случаях себе в ногу попадете :) Это решение , почему так - потому что Хибер думает что еще кто то где то мог ваш обхект или его поля изменять и перестраховывается и апдейтит все сразу , даже то что вы не меняли В JPA нету, это хибернейтовское. Мне кажется если включить кэш 2го уровня, то будет без лишних полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:01 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Blazkowiczno56892А что там за dirtychecking если вытаскивать для чтения? Если вытаскивать в read-only, то dirty checking, как раз не будет. Тут вопрос к старшим коллегам можно добиться такого эффекта в Хибернейте путем проставления .setReadOnly(true). Код: java 1. 2. 3. 4. 5. 6. 7. 8. а что делать в JPA и spring-data-repository ? http://javabeat.net/spring-data-repository-read-only-write-only/ Это будет реальная альтернатива и замена Хибернетй подходу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:18 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, Опять куча каких-то "левых" аннотаций не к месту... Оно и так не будет делать dirty checking, т.к. если апдейтов нет - он тупо не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:25 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, Чего там в pure JPA сказать не могу. В Spring можно добиться аналогичного эффекта через @Transactional(readOnly=true). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:31 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Опять куча каких-то "левых" аннотаций не к месту... Оно и так не будет делать dirty checking, т.к. если апдейтов нет - он тупо не нужен. Дело не в этом. Если у тебя не read-only сессия, то Hibernate будет создавать прокси для dirty checking, когда они не нужны. А так же будет хранить слепки оригинального состояния сущности, которые тоже не нужны. Еще одна важная оптимизачия чтения в ORM это FlushMode. У меня как раз вчера коллеги в NHibernate с этим столкнулись, потому что Spring не используют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:35 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, автор1)Про update - ставите @DynamicUpdate(true) - будет обновлять только одно поле ... но... но ..нужно понимать в каких случаях себе в ногу попадете :) Это решение , почему так - потому что Хибер думает что еще кто то где то мог ваш обхект или его поля изменять и перестраховывается и апдейтит все сразу , даже то что вы не меняли В JPA нету, это хибернейтовское. Мне кажется если включить кэш 2го уровня, то будет без лишних полей. С чего бы? вот тест : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: java 1. 2. 3. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Вывод : update City set country='Ukraine', name='Kharkiv' where id_city=1 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:39 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1, Чего там в pure JPA сказать не могу. В Spring можно добиться аналогичного эффекта через @Transactional(readOnly=true). Вот я и в сомнениях ... ибо такое впечатление что просто @Transactional(readOnly=true) не работает ... нужно как то так ... @Transactional(readOnly = true , propagation = Propagation.SUPPORTS) + еще можно обернуть все в unmodifiableList :) Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:44 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1ибо такое впечатление что просто @Transactional(readOnly=true) Работает. Но как-то не до конца. Я смотрю org.springframework.orm.jpa.vendor.HibernateJpaDialect FlushMode этим атрибутом регулируется. Но вот где он Session.setDefaultReadOnly() делает - я не вижу такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 11:56 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, В доке сказано что оптимизация имеется http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories It’s definitely reasonable to use transactions for read only queries and we can mark them as such by setting the readOnly flag. This will not, however, act as check that you do not trigger a manipulating query (although some databases reject INSERT and UPDATE statements inside a read only transaction). The readOnly flag instead is propagated as hint to the underlying JDBC driver for performance optimizations. Furthermore, Spring will perform some optimizations on the underlying JPA provider. E.g. when used with Hibernate the flush mode is set to NEVER when you configure a transaction as readOnly which causes Hibernate to skip dirty checks (a noticeable improvement on large object trees). Но у меня вместо NEVER получается MANUAL, а readonly прилетает через queryParameters ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 12:10 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892По поводу порядка запросов - а какая вам разница-то? AFAIK При сложной структуре БД и кучу FK / constraints / triggers - может быть критично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 12:58 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Flush ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 13:00 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕще одна важная оптимизачия чтения в ORM это FlushMode. У меня как раз вчера коллеги в NHibernate с этим столкнулись, потому что Spring не используют. В свое время Вы мне этим очень помогли !За что огромное спасибо :) FlushMode это вообще какой-то волшебный атрибут у хибера :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 13:40 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1, В доке сказано что оптимизация имеется http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories It’s definitely reasonable to use transactions for read only queries and we can mark them as such by setting the readOnly flag. This will not, however, act as check that you do not trigger a manipulating query (although some databases reject INSERT and UPDATE statements inside a read only transaction). The readOnly flag instead is propagated as hint to the underlying JDBC driver for performance optimizations. Furthermore, Spring will perform some optimizations on the underlying JPA provider. E.g. when used with Hibernate the flush mode is set to NEVER when you configure a transaction as readOnly which causes Hibernate to skip dirty checks (a noticeable improvement on large object trees). Но у меня вместо NEVER получается MANUAL, а readonly прилетает через queryParameters тут вот так же есть описание поведения readOnly на JDBC http://www.ibm.com/developerworks/ru/library/j-ts1/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 13:43 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1тут вот так же есть описание поведения readOnly на JDBC http://www.ibm.com/developerworks/ru/library/j-ts1/ Это уже зависит от драйвера и БД. Но Spring Data пытается и у конекшна этот флаг установить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 13:54 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1тут вот так же есть описание поведения readOnly на JDBC http://www.ibm.com/developerworks/ru/library/j-ts1/ сам сказал, что в ОРМ полно подводных камней. А введением флага "только чтение" ты ещё добавил второй миллион багов и особенностей выполнения на разных БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 14:19 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1, это на тебя тот паттерн так повлиял? Первый паттерн - "взял и работай". Ничего не трогая и не переключая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 14:20 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1, это на тебя тот паттерн так повлиял? Первый паттерн - "взял и работай". Ничего не трогая и не переключая. @Transactional(readOnly=true) - Это простой спринговый аспект (ну хочется в это верить:) ) так что его код можно взять и посомтреть https://github.com/spring-projects/spring-framework/blob/master/spring-tx/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java ну или какую то реализацию ... грубо говоря это равносильно тому что мы метод обернули в исполнение сами - мы же можем ввести свою транзакцию : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. но в декларативном стиле @Transactional(readOnly=true) - лучше смотрится ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 15:56 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1Это простой спринговый аспект (ну хочется в это верить:) ) я не против. Только что он сделает в моём примере с Ораклом? Там нет читающих транзакций. Коннект может делать что угодно если есть права в БД. Поэтому я не понял всей этой бодяги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:04 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1в исполнение сами - мы же можем ввести свою транзакцию : Угу, только в ручной транзакции мы - Не сказали коннекшну быть readOnly - Не поменяли FlushMode, что скорее всего приведет к потере производительности - Не сказали хибернейтовской сессии отключить dirty check proxy и snapshot-ы - Никак не учитываем внешню транзакцию, если она уже открыта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:42 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1в исполнение сами - мы же можем ввести свою транзакцию : Угу, только в ручной транзакции мы - Не сказали коннекшну быть readOnly - Не поменяли FlushMode, что скорее всего приведет к потере производительности - Не сказали хибернейтовской сессии отключить dirty check proxy и snapshot-ы - Никак не учитываем внешню транзакцию, если она уже открыта ну тут уже можно все эти параметры накрутить в виде атрибутов , что собственно в спринге и делается ?! Petro123 , С Ораклом нужно смотреть как это реализовано у спринга и хибернейта . Думаю есть какое то решение. Через спринг и хибернейт я работаю с mysql . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:45 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Нифига transaction readonly не нужен. Дирти чек если только читать - его не будет, а то что будет выделять память для снэпшотов, да и фиг с ней. В джаве на памяти не заморачиваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:45 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Нифига transaction readonly не нужен. Дирти чек если только читать - его не будет, а то что будет выделять память для снэпшотов, да и фиг с ней. В джаве на памяти не заморачиваются. Не мерял как там dirty check на производительность влияет, а вот смену FlushMode на производительности видно невооруженным глазом. Так что не надо трындеть. Читайте внимательнее что пишут. Иначе флаш после каждого запроса даст вашему серверу просраться как следует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:48 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Atum1С Ораклом нужно смотреть как это реализовано у спринга и хибернейта . Думаю есть какое то решение. Через спринг и хибернейт я работаю с mysql . нууууу. Это неинтересно)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 16:50 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
Blazkowiczno56892Нифига transaction readonly не нужен. Дирти чек если только читать - его не будет, а то что будет выделять память для снэпшотов, да и фиг с ней. В джаве на памяти не заморачиваются. Не мерял как там dirty check на производительность влияет, а вот смену FlushMode на производительности видно невооруженным глазом. Так что не надо трындеть. Читайте внимательнее что пишут. Иначе флаш после каждого запроса даст вашему серверу просраться как следует. Причем здесь FlushMode и readonly? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 17:03 |
|
||
|
JPA много @OneToOne
|
|||
|---|---|---|---|
|
#18+
no56892Причем здесь FlushMode и readonly? При тому что Spring умеет говорить JPA использовать FlushMode.MANUAL/NEVER когда стоит флаг readOnly. В противном случае, если у вас будет одна сессия на кучу запросов, вы получите флаш на каждый заспрос с офигенным проседанием производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 17:14 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39269109&tid=2122962]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 371ms |

| 0 / 0 |
