In the last couple of weeks, I've been working on building a new architecture of a product for one of our customers. As many other products you probably know, I had to design the object model and be able to persist it to the the DB. So natively, I wanted to use JPA and Hibernate in order to persist the objects into the RDBMS. But then a new requirement came and bumped my face - “parts of the domain-model and the data-model may be changed dynamically at runtime every now and again, while the system should stay running and without downtime”. The changes for the model can be applied by end users with “admin” role of the product, actually without changing the product itself (no new revision the product should be involved in this process).