首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring启动期间执行本机SQL查询

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

Stack Overflow用户
提问于 2016-10-20 21:35:12
回答 2查看 1.5K关注 0票数 1

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

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

现在我想执行一些自定义的本机SQL查询。这些查询不会返回任何内容,它们只是配置内容(比如创建额外的索引或扩展)。

目前,为了创建一个新的Hibernate SessionFactory,我不得不创建一个Session。我试过自动配线,但不起作用:

代码语言:javascript
复制
@Autowired
SessionFactory sessionFactory;

给我:Field sessionFactory in ... required a bean of type 'org.hibernate.SessionFactory' that could not be found.

我知道我可能需要在其他地方配置它,但我不知道在哪里。有几个答案使用xml配置文件,但我没有使用任何配置文件,所以我不能这样做。

是否有一种方法可以使用适当的配置创建SessionFactory?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 08:42:30

您甚至不需要访问SessionFactory。只需将脚本放入文件src/main/resources/script/myscript.sql即可。然后,您可以使用Spring执行以下操作:

代码语言:javascript
复制
@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
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-10-21 05:09:41

您可以将JPA EntityManager自动定义为:

代码语言:javascript
复制
@PersistenceContext
EntityManager entityManager;

如果您确实需要Hibernate Session,并且正在使用JPA2.1,则Session可以从EntityManager获得如下所示:

代码语言:javascript
复制
entityManager.unwrap(Session.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40164943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档