How often do you find yourself migrating DBs in the course of a project's lifetime?
Same goes for java app containers.
Does implementing a different pattern that abstracts away the database engine substantially lower the amount of work it takes to migrate the db in the codebase, and is it worth 5-10 years of dealing with another layer of abstraction that is unused most of the time.
My hypothesis is that even with a more configurable pattern for the DB there is still a lot of code that needs to be changed.