没有事务性EntityManager可用;

时间:2015-04-02 07:46:41

标签: spring entitymanager

我的应用程序使用spring和jpa,我有两个配置文件:

的AppConfig:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.test.api" })
@EnableJpaRepositories("com.test.api.repository")
@PropertySource("classpath:application.properties")
public class AppConfig { 
}

WebAppConfig:

@Configuration
  @EnableWebMvc
  @ComponentScan(basePackages = { "com.test.webservice" })
  public static class WebAppConfig extends WebMvcConfigurerAdapter {

  }

几乎可以正常工作,但有时会引发异常:Caused by: java.lang.IllegalStateException: No transactional EntityManager available即使我只选择记录(不创建,更新或删除数据。)

如果我将注释:@ComponentScan(basePackages = { "com.test.api" })移动到类WebAppConfig并删除:@ComponentScan(basePackages = { "com.test.webservice" })则异常消失,但是当服务器启动和spring bean重复时,spring上下文会加载很多次。

或者如果我使用entityManager.getEntityManagerFactory().createEntityManager().unwrap(Session.class)代替entityManager.unwrap(Session.class),那么异常也会消失。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

删除WebAppConfig上的ComponentScan,并在AppConfig上的ComponentScan注释中添加该包,这样可以解决您的问题。