繁体   English   中英

在Spring启动期间执行本机SQL查询

[英]Perform native SQL Query during Spring startup

我正在使用Spring和Hibernate自动生成的数据库(因为我在JPA配置属性中将"hibernate.hbm2ddl.auto"设置为"update" )。

我还有一个使用@PostConstruct方法注释的@Configuration类,该方法在创建或更新数据库后在应用程序启动时调用。 这是我使用一些默认数据设置数据库的地方,如果它是空的(首次启动)。

我想在此刻执行一些自定义本机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

您甚至不需要访问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
        }
    }
}

您可以将JPA EntityManager自动装配为:

@PersistenceContext
EntityManager entityManager;

如果您确实需要Hibernate Session并使用JPA 2.1,则可以从EntityManager获取Session作为:

entityManager.unwrap(Session.class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM