2015-04-02 5 views
0

Мое приложение с помощью пружины и JPA, у меня есть два конфигурационный файл:Отсутствует транзакционный EntityManager;

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" }), тогда исключение исчезнет, ​​но весенний контекст загружает много раз, когда запуск сервера и весенние бобы дублируются.

Или Если я использую entityManager.getEntityManagerFactory().createEntityManager().unwrap(Session.class) вместо entityManager.unwrap(Session.class), то исключение также исчезает.

Как его решить?

ответ

0

Удалите компонент ComponentScan на WebAppConfig и добавьте пакет в аннотацию ComponentScan на AppConfig, которая должна решить вашу проблему.

+0

Спасибо, но это не работает @dunni. Это то же исключение. – namtn

+0

Не могли бы вы опубликовать свой код, где вы настраиваете EntityManager? Возможно, в этом есть ошибка. – dunni

Смежные вопросы