Spring JPA 存储库@PostConstruct

Spring JPA Repositories @PostConstruct

我是 Spring (4.2.5) 和 JPA 的新手,我面临与 @PostConstruct 相关的问题。在我的项目中,我编写了存储库,并通过使用 @PostConstruct 和内部 init 方法向它们插入数据。

  @PostConstruct
  public void init(){
    Role roleUser = new Role();
    roleUser.setName("ROLE_USER");
    roleRepository.save(roleUser);

    Role roleAdmin = new Role();
    roleAdmin.setName("ROLE_ADMIN");
    roleRepository.save(roleAdmin);
}

我正在通过调用 applicationContext.xml

来初始化所有存储库
<context:component-scan base-package="com.shiva.controller">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:annotation-config/>
 <jpa:repositories base-package="com.shiva.repository"  entity-manager-factory-ref="emf"  />

但在日志中正在创建表,但问题是插入语句 没有被调用,我可能怀疑这个 init 方法是否被调用。

这些是 table 创建的日志,但我没有得到我从 applicationContext.xml:

调用的插入语句
Hibernate: drop table if exists Blog
Hibernate: drop table if exists Item
Hibernate: drop table if exists Role
Hibernate: drop table if exists Role_User
Hibernate: drop table if exists User
Hibernate: drop table if exists User_Role
Hibernate: create table Blog (id integer not null auto_increment, name varchar(255), url varchar(255), user_id integer, primary key (id))
Hibernate: create table Item (id integer not null auto_increment, description varchar(255), link varchar(255), published_date datetime, title varchar(255), blog_id integer, primary key (id))
Hibernate: create table Role (id integer not null auto_increment, name varchar(255), primary key (id))
Hibernate: create table Role_User (Role_id integer not null, users_id integer not null)
Hibernate: create table User (id integer not null auto_increment, email varchar(255), name varchar(255), password varchar(255), primary key (id))
Hibernate: create table User_Role (User_id integer not null, roles_id integer not null)

我该如何调查这个问题?

启用@PostConstruct 处理:

<context:annotation-config/>

或者

<context:component-scan/>

你可以在这里找到类似的 post:

@PostConstruct method is not called in Spring

感谢大家的回复....问题出在我的 applicationServlet.xml 文件中...我修改了代码以像这样扫描 jpaRepositories ..

<jpa:repositories base-package="com.shiva.repository"   entity-manager-factory-ref="emf" transaction-manager-ref="txManager" />

我给出了 entity-manager-factory 和 transaction-manager 的参考,它对我来说非常完美:)