2013-10-25 3 views
0

Я перешел из конфигурации XML в кодовую конфигурацию. Вот мой JpaContext.java класс:Не удается инициализировать EntityManagerFactory с кодовой конфигурацией

@Configuration 
@ComponentScan(basePackages = { "com.foo.bar.repository", "com.foo.bar.domain" }) 
@EnableJpaRepositories(basePackages={"com.foo.bar.repository"}) 
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, order = 0) // is like <tx:annotation-driven/> 
@PropertySource({"classpath:persistence.properties" }) 

public class MyJpaContext { 
    private static final Logger logger = LoggerFactory.getLogger(MyJpaContext.class); 

    @Autowired 
    Environment env; 

    private @Value("${persistence.db.driverClass}") String driverClass; 
    private @Value("${persistence.db.url}") String url; 
    private @Value("${persistence.db.username}") String userName; 
    private @Value("${persistence.db.password}") String passWord; 

    @Bean 
    public DataSource dataSource() { 
     System.out.println(">>>>> Creating DataSource..."); 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     logger.info(String.format("Using JDBC driver: %1$s", driverClass)); 
     logger.info(String.format("Using DB URL: %1$s", url)); 
     logger.info(String.format("Logging into DB with username: <%1$s> and password <%2$s>", userName, passWord)); 
     dataSource.setDriverClassName(driverClass); 
     dataSource.setUrl(env.getProperty("persistence.db.url")); 
     dataSource.setUsername(userName); 
     dataSource.setPassword(passWord); 
     System.out.println("<<<<< DataSource successfully created."); 
     return dataSource; 
    } 

    @Bean 
    public HibernateJpaVendorAdapter jpaVendorAdapter() { 
     System.out.println(">>>>> Creating HibernateJpaVendorAdapter..."); 
     HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
     adapter.setShowSql   (env.getProperty("persistence.hibernate.showSql", Boolean.class )); 
     adapter.setGenerateDdl  (env.getProperty("persistence.hibernate.generateDdl", Boolean.class)); 
     adapter.setDatabasePlatform (env.getProperty("persistence.hibernate.databasePlatform"   )); 
     System.out.println("<<<<< HibernateJpaVendorAdapter successfully created."); 
     return adapter; 
    } 

    @Bean 
    // @DependsOn({"dataSource"}) 
    public EntityManagerFactory entityManagerFactory() { 
     System.out.println("Creating EntityManagerFactory..."); 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setPersistenceXmlLocation("classpath*:META-INF/persistence.xml"); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan("com.foo.bar.repository"); //this implicitly generates an appropriate persistence.xml for us at runtime . 
     em.setJpaVendorAdapter(jpaVendorAdapter()); 
     em.setJpaProperties(additionalProperties()); 
     em.setPersistenceUnitName("My_PU"); 
     em.setPersistenceProviderClass(org.hibernate.ejb.HibernatePersistence.class); 
     em.afterPropertiesSet(); 
     System.out.println("<<<<< EntityManagerFactory successfully created."); 
     return em.getObject(); 
    } 

    Properties additionalProperties() { 
     return new Properties() { 
      { // Hibernate Specific: 
       setProperty("hibernate.hbm2ddl.auto", "update"); 
       setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
      } 
     }; 
    } 

    @Bean 
    public JpaTransactionManager transactionManager() { 
     System.out.println("Creating JpaTransactionManager..."); 
     return new JpaTransactionManager(entityManagerFactory()); 
    } 

// @Bean 
// public PlatformTransactionManager txManager() { 
//  System.out.println(env.getProperty("moka.session.timeout")); 
//  return new DataSourceTransactionManager(dataSource()); 
// } 

    @Bean 
     public PersistenceExceptionTranslator hibernateExceptionTranslator() { 
     System.out.println(">>>>> Creating HibernateExceptionTranslator..."); 
     return new HibernateExceptionTranslator(); 
    } 
} 

При вызове em.afterPropertiesSet(); я бегу в

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: 
Factory method [public javax.persistence.EntityManagerFactory 
com.foo.bar.config.MyJpaContext.entityManagerFactory()] threw exception; 
nested exception is 
java.lang.TypeNotPresentException: 
Type com.foo.bar.domain.AbcTicket not present 

, когда я начинаю TOMCAT ... хотя это AbcTicket класс существует окончательно.

Что я пропустил, чтобы Spring мог инициализировать мое веб-приложение?

Прежде чем перейти от конфигурации на основе XML к конфигурации с кодовым разделением (один за другим), я смог запустить мое веб-приложение.

+0

Вы сканируете 'com.foo.bar.repository', а не' com.foo.bar.domain', который содержит 'com.foo.bar.domain.AbcTicket'. –

+0

Вы хотите сказать, что аннотация EnableJpaRepositories? Я попытался включить com.foo.bar.domain там, тоже без успеха. ... и @ComponentScan содержит пакет, в котором находится AbcTicket ist. ... но ... AbcTicket аннотируется с Entity. Этот тип сканируется вообще? –

ответ

0

Кажется, что это проблема рефакторинга. Я удалил все происшествия и отношения с AbcClass и снова их воссоздал ... и теперь он работает хорошо.

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