write the ddl statements (to create/alter tables and other database objects) yourself and execute them manually
don't use hbm2ddl in your application
write 1 Dao for each entity with create, read, update, delete, find and other required methods
consider Spring to handle
transaction management using annotation instead of creating transactions in the code yourself. And if you do, consider
Spring Data JPA as well.