18.04.2014 mikalai alimenkou · at least 2 sql queries for simple update not everybody understand...
TRANSCRIPT
![Page 1: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/1.jpg)
Why do I hate Hibernate?
Mikalai Alimenkou
http://xpinjection.com
18.04.2014
![Page 2: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/2.jpg)
9 YEARS,TECH LEAD
7 YEARS,EXPERT
ORGANIZER AND SPEAKER:
FOUNDER AND COACH:
![Page 3: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/3.jpg)
CRUD*R – read by ID
![Page 4: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/4.jpg)
Why Hibernate is so popular?
1. EJB 2 sucks!
2. New “standard”
+
![Page 5: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/5.jpg)
WTF #1. Nobody understand how equals and hashCode must look like
![Page 6: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/6.jpg)
Hard to select real “unique business key”
Performance issues with collections
Comparison context is very important
Auto-generated fields in Set
![Page 7: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/7.jpg)
WTF #2. Mutable objects are evil
![Page 8: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/8.jpg)
Inconsistent object state is possible
Or… reflection magic happens
Default constructor must
presentFields can’t be final
![Page 9: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/9.jpg)
POJO bullshit game
![Page 10: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/10.jpg)
WTF #3. DTO is evil pattern with Hibernate
![Page 11: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/11.jpg)
Many solutions: - transformers
- beanutils - reflection- libraries
Crazy DTO “don’t forget” checklist
DTO maintenance is nightmare
Lots of code duplications
![Page 12: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/12.jpg)
WTF #4. LazyInitializationException
![Page 13: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/13.jpg)
Nightmare for newcomers
Almost nobody understand how
it works
Everything is stupidly slow without it
Persistent collections are not serializable
![Page 14: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/14.jpg)
WTF #5. Criteria API or HQL?
=
![Page 15: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/15.jpg)
WTF?!?No need to know
SQL??? Bullshit!!!
![Page 16: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/16.jpg)
No check for NULL in HQL
Criteria API only for READ
Different features set in HQL and Criteria API
Hand made query builders in HQL
![Page 17: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/17.jpg)
WTF #6. To update single field you should read full entity
![Page 18: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/18.jpg)
At least 2 SQL queries for
simple update
Not everybody understand how
‘lazy loading’ works
Children and large fields are loaded
HQL update is not object-oriented
![Page 19: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/19.jpg)
WTF #7. Temporary table usage on update or delete
![Page 20: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/20.jpg)
WTF #8. Composite key requires separate class
![Page 21: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/21.jpg)
WTF #9. Entity state can be managed only from one side in parent-child relationship
![Page 22: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/22.jpg)
WTF #10. Flush on commit is too unpredictable
![Page 23: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/23.jpg)
No control for SQL queries order
Collections operations are ‘live’
Entity changes are persisted
Constraints are checked on commit
![Page 24: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/24.jpg)
WTF #11. Dirty entity after transaction rollback can’t be reused
![Page 25: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/25.jpg)
WTF #12. Documentation is simple but primitive
![Page 26: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/26.jpg)
Bug reports are ignored
Debug hell to understand how
things work
Only basic samples are coveredFor complex
things you need books
![Page 27: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/27.jpg)
WTF #13. Hibernate makes developers stupid
Are you joking???
![Page 28: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/28.jpg)
Developers don’t tune JDBC properties
People don’t learn JDBC and SQL
Nobody count SQL queries and care about their
structure
![Page 29: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/29.jpg)
When we really need to use ORM?
![Page 30: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/30.jpg)
Is CQRS more actual now?
![Page 31: 18.04.2014 Mikalai Alimenkou · At least 2 SQL queries for simple update Not everybody understand how ‘lazy loading’ works Children and large fields are loaded HQL update is not](https://reader036.vdocuments.net/reader036/viewer/2022071020/5fd407524049b71c4d0cc3de/html5/thumbnails/31.jpg)
Useful books