On the long run, it makes a lot of sense to use an open-source framework instead of rolling our your own solution because you don't have to spend money maintaining it.
Now, before I answer all your questions, you should know that Hibernate has a
70% market share, there are
tons of tutorials available on the Internet as well as
StackOverflow answers.
Now, back to your questions.
Hibernate supports
dynamic updates. However, by default, all columns are updated using a statement that can be cached. So, for entities where you don't have many indexes, the statement caching might outperform dynamic updates. For tables where you have many indexes, you should use the @DynamicUpdate support offered by Hibernate.
Quote:
* batch updates (each row might have a different set of modified columns)
will there be multiple statements or one with the superset of columns?
individual statements would defeat the batching-purpose, we think
Hibernate supports statement batching, and
even reordering so that cascading does not affect batch inserts and updates.
Quote:
* will the statements be kept as prepared across transactions and reused for the same subsets?
rebuilding and reparsing would be unwanted overhead
Hibernate uses PreparedStatements exclusively, so you can reuse execution plans since you're using Oracle.
Quote:
* will special consideration be used for partitioned tables?
I'm aware that
special care must be taken for PostgreSQL, so that might be the case for Oracle too.
Quote:
* will columns with constraints (foreign key and check) be treated special?
removing those has bigger impact, than run-of-mill fields, since it avoids the check
Hibernate uses FK columns for managing associations. Even if you might drop the constraint in the D (which might be a bad choice), Hibernate will still work.
Quote:
* will columns with indexes be treated special?
not updating them can skip the full index maintance
No. But you can use @DynamicUpdates as indicated above.
Quote:
* will the mechanism try to apply common sense?
for example if the statement still contains > 66% (configurable) of all columns and the remainder are all run-of-the-mill simply switch to the full update
i.e. less then all permutations of all fields, say a maximum of 5, so as not to flood the database statement cache causing excessive reparsing.
requires finding the closest inclusive match.
That's up to you do decide if an entity should use @DynamicUpdate or not (the default). Hibernate does not use any AI to figure this out.
Quote:
* if any of these features are not there, have there been analysises of them with the decision not to implement them?
Think about it! Hibernate is used by millions of developers every day, on Oracle, SQL Server, PostgreSQL, MySQL, DB2, etc. That being said, it comes with almost anything you'll ever need for a typical OLTP application.
Quote:
* are there hooks in the hibernate framework that would allow one to implement these without having to directly patch core hibernate code?
You can customize almost anything in Hibernate. Even the way
entity state transitions are handled, CRUD statements,
identifier generators, etc.
We also integrate Pull Requests from our community as well. It's an open source project after all.
Quote:
* are there features implemented in this area that were not touched upon in the list above but could guide a comparison?
There are many more features that Hibernate offers and you haven't mentioned them. Check out this
list of awesome features Hibernate comes with and you might not find them in other JPA providers.
All in all, Hibernate is a great choice.