5

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!

leamasuero
  • 341
  • 1
  • 7
  • 17
  • use a [ContextLoaderListener](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/context/ContextLoaderListener.html) or something like that? –  Aug 03 '16 at 13:18

1 Answers1

2

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

O.Badr
  • 2,853
  • 2
  • 27
  • 36