I've got a database that's utilized by a number of Java programs. I wish to encapsulate the DB from the programs, to ensure that whenever there's a general change in the DB schema, the alterations that should be completed in the programs are trivial.

What type of technology is better to implement this?

An answer I'm able to think about is applying an ORM tool like Hibernate but this is accomplished in the application, not in the DB. I would like the DB itself to become abstracted from the programs.

One possible solution will be a layer of sights on the top of the tables. You'll be able to make certain this layer keeps compatibility for that calling programs.

This really is easily accomplished for clients that only read data.

Clients that write data will require another mechanism, saved technique of good examples. Ultimately, the aim is to produce a configurable layer on the top from the tables using either methods or sights.