If Java and RDBS/SQL are like 2 rival empires, then ORM is the UN.

Or maybe Java and SQL/RDMS are like 2 parents in divorce court, and ORM is their fucked up child?

I am going to call it the double-authority problem.

Information Technology is all about providing authoritative replies to requests for information, typically in some structured fashion.

The reason OO is a powerful strategy for developing systems that interact with the real world is because the API specifies the properties, behaviours and relationships in an intuitive way, hence the real world is modelled.

The "authority" of OO system is captured in the API it exposes, and having to re-synchronise this with another static data type system such as a relational database with its structured normal forms is a massive PITA even if done well.

However in IT there are strong separate cultures of SQL-developer and OO-developer in industry, each defending their authority over the data, letting no ground go to the other side.

If you wanted to reliably persist data, in a well supported and well understood way, you had no options to but to use some relational database, typically using SQL for queries. But with NoSQL exploding (and crashing) onto the scene this really looks to be over.

SQL is brilliant for sets, but really it doesn't model anything with dynamic attributes or time components well at all, so I think ORM is a sign of the end times for this un-holy union.

One of the benefits of Oracle now the master of the destiny of Java, is that hopefully they can give all the SQL and OO developers a bunch of drugs and alcohol and send them off to Vegas for the weekend to get more acquainted, hopefully in 9 months or so they will give birth to something less abominable.