Nice summary of diffrent solutions for data persitence.
Starting from scratch I would prefer "Database first" since a database (and its data) may live longer than our code or other products may also accesthose data. Choosing "Database first" allow you to concentrate on relationship model aka core business values.
But in real life, people don't early understand the necessity for a persitence layer (unless an architect is part of the team) and create both objects/tables and end up needing to use the "Spaghetti Junction". Especially if one team deals with database and the other with java objects.