The notorious ORM pro / con discussion heavily amuses me. I always find it very funny when people have passionate discussions about which solution is better, rather than discussing about which solution is better suited for the problem at hand. In the case of ORMs vs. plain SQL, obviously, no solution is simply better as both techniques have their merits. When comparing ORMs with jOOQ, I think that this page summarises it pretty well:
http://www.hibernate-alternative.com
Now, this article and most specifically, one answer is hilarious:
http://java.dzone.com/articles/defense-hand-coded-sql
While the article’s author is already asking for trouble, check out this one particular answer. I love it when people manage to correctly spell “moron”:
People who handwrite SQL are invariably morons.
Here’s what you miss out when using a good ORM with generated mappings:
- Automatic first and second level caching
- Guaranteed consistency between code and database structure. Change the database? Regenerate pojo’s -> compile errors until code adheres to database structure.
- True vendor independence. Yes, I’m switching between six different db’s in our products with zero issues.
- I work with objects, not relation sets. That kinda makes sense in an oop language.
- Build-in query languages in decent ORMs are much more productive and, again, vendor independent.
- Any decent ORM understands and injects vendor specific query hints better than you.
Also, get a clue.
Here’s my adequate reply to the above:
OK, now this was amusing
![]()
- Automatic first and second level caching
This, obviously, is utterly impossible outside the world of ORMs.
- Guaranteed consistency between code and database structure. Change the database? Regenerate pojo’s -> compile errors until code adheres to database structure.
True. No one has ever written a code generator before it was added to Hibernate.
- I work with objects, not relation sets. That kinda makes sense in an oop language
… which your DBA will probably always agree with. Remember to remind your manager why he bought that 1M$ Oracle license, when you run N+1 selects for fetching your OOP objects.
- Build-in query languages in decent ORMs are much more productive and, again, vendor independent.
Of course, there is always a black / white answer to “productivity”- questions. Like, how productively you can express a SQL:2003 MERGE statement with HQL. Or, how productively you can calculate a running total involving window functions, or maybe, recursive SQL with HQL.
- Any decent ORM understands and injects vendor specific query hints better than you.
That is indeed an amazing theory, which I was utterly unaware of.
The eternal debate between ORM lovers and haters. Mankind has always been this stupid. Like the AC vs. DC discussion between Nikola Tesla and Thomas Edison…
And, Eclipse will totally win over IntelliJ!
Filed under: java Tagged: Database, Edison, hibernate, HQL, java, jooq, Nikola Tesla, Object-relational mapping, ORM, POJOs, sql, Tesla, Thomas Edison
