Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate - Seed database without using import.sql

I come from php/laravel. Whenever I want to seed the database i only need to run php artisan db:seed. This will run some php scripts that will insert data into the database.

I want to achieve this same feature using spring/hibernate. I know I can add an import.sql file to seed the database after schema creation. However, I want to import these fixtures using java and the ORM available so I do not need to maintain an sql.

Is there a way? If not, there should be some configuration to trigger a script that use the ORM entity manager to persist entities in the database after schema creation. The main idea is not to maintain a big sql seeder file over schema revisions.

Thanks!

like image 378
leamasuero Avatar asked Nov 09 '22 11:11

leamasuero


1 Answers

If you're using Spring data you can use Repository populators.

Otherwise you may register an event that fires after the spring context is loaded :

@Component
public class YourListener {

    // Declare your autowired beans here 

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
        // Your seeder 
        // + You can use all the registred beans (repositories, services...)
    }
}

For more detail check: Better application events in Spring Framework 4.2

like image 109
O.Badr Avatar answered Nov 14 '22 22:11

O.Badr