package kr.debop4j.data.hibernate.config.java;
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* kr.debop4j.data.hibernate.config.java.HibernateConfig
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 2. 19.
*/
@Configuration
@EnableTransactionManagement
public class HibernateConfig {
@Bean
public SessionFactory sessionFactory() {
return
new org.springframework.orm.hibernate4.LocalSessionFactoryBuilder(dataSource())
.addAnnotatedClasses(Account.class)
.buildSessionFactory();
}
@Bean
public PlatformTransactionManager transactionManager() {
return new org.springframework.orm.hibernate4.HibernateTransactionManager(sessionFactory());
}
@Bean
public DataSource dataSource() {
EmbeddedDatabaseFactoryBean bean = new EmbeddedDatabaseFactoryBean();
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
databasePopulator.addScript(new ClassPathResource("kr/debop4j/data/hibernate/config/java/schema.sql"));
bean.setDatabasePopulator(databasePopulator);
bean.afterPropertiesSet(); // EmbeddedDatabaseFactoryBean가 FactoryBean이므로 필요합니다.
return bean.getObject();
}
}