我正在使用Spring和Hibernate自动生成的数据库(因为我在JPA配置属性中将"hibernate.hbm2ddl.auto"
设置为"update"
。
我还有一个带注释@Configuration
的类,其中@PostConstruct
方法在创建或更新数据库后在应用程序启动时调用。这是我使用一些默认数据设置数据库的地方,如果它是空的(首次启动)。
我想在此时执行一些自定义本机SQL查询。这些查询不会返回任何内容,它们只是配置内容(如创建其他索引或扩展名)。
目前,我一直在创建SessionFactory
以创建新的Hibernate Session
。我尝试过自动接线,但它不起作用:
@Autowired
SessionFactory sessionFactory;
给我:Field sessionFactory in ... required a bean of type 'org.hibernate.SessionFactory' that could not be found.
据我所知,我可能需要在别处配置它,但我不知道在哪里。关于SO的几个答案使用xml配置文件,但我没有使用任何配置文件,所以我不能这样做。
Spring是否可以使用适当的配置创建SessionFactory
?
答案 0 :(得分:3)
您甚至不需要访问SessionFactory。请将您的脚本放入src / main / resources / scripts / myscript.sql文件中。然后,您可以使用Spring执行以下操作:
@Component
public class Startup {
@Autowired
private DataSource dataSource;
@PostConstruct
public void runNativeSql() {
ClassPathResource resource = new ClassPathResource("scripts/myscript.sql");
try(Connection connection = dataSource.getConnection()) {
ScriptUtils.executeSqlScript(connection, resource);
} catch (SQLException | ScriptException e) {
//LOG
}
}
}
答案 1 :(得分:0)
您可以将JPA EntityManager
自动装配为:
@PersistenceContext
EntityManager entityManager;
如果您确实需要Hibernate Session
并且正在使用JPA 2.1,则Session
可以从EntityManager
获取:
entityManager.unwrap(Session.class);