Versioning system for database

2019-08-30 22:15发布

问题:

We have a java application which uses spring boot and hibernate.

There are many changes on entities and fields. That's why, I want to follow changes and rollback mechanism. So that, I need a version control system over database. I checked flyway and liquibase, but I think those don't solve my problem. Because my table creations and updates are handled by hibernate.

Is there any way to see which queries are executed by hibernate to change the database and which changes have occurred since the latest database change (I mean new table, column creation or refactoring)?

回答1:

One way to do it (how we do it):

Use 2 databases. A reference database and a development database. On the development database use hibernate to let it create the strucutre.

Once a development cycle is done you run liquibase diffChangelog on the reference database. It will create a changelog.xml with all changes that have been done by hibernate on the development db. Manually correct it (names, etc). When your happy with changelog file and the development cylce is done apply the changelog onto the reference database.

Start your next development cycle and repeat.

That way you can combine the advantages of letting hibernate generate the schema and still use liquibase to have a versioned DB-Schema that is re-creatable.



回答2:

Use those tools as those are dedicated for this purpose. Personally, I like Liquibase more but it's your choice.

Hibernate's schema creation mechanism should not be used in production as then your Java description of the entity would drive the creation of the tables resulting in an inefficient structure. That feature is only there for testing purposes.