2013-10-25 82 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類是存在明確。

我錯過了什麼,春天能夠初始化我的Web應用程序?

從基於XML的配置轉到基於代碼的配置(逐個元素)之前,我能夠啓動我的web應用程序。

+0

您正在掃描包含'com.foo.bar.domain.AbcTicket'的'com.foo.bar.repository',而不是'com.foo.bar.domain'。 –

+0

你是指EnableJpaRepositories註釋?我試圖把com.foo.bar.domain放在那裏,也沒有成功。 ...和@ComponentScan包含AbcTicket ist的包。 ...但是... AbcTicket用實體註釋。這種類型是否掃描? –

回答

0

看起來好像它是一個重構問題。 我刪除了所有發生和關係到AbcClass並重新創建它們......現在它運行良好。

相關問題