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應用程序。
您正在掃描包含'com.foo.bar.domain.AbcTicket'的'com.foo.bar.repository',而不是'com.foo.bar.domain'。 –
你是指EnableJpaRepositories註釋?我試圖把com.foo.bar.domain放在那裏,也沒有成功。 ...和@ComponentScan包含AbcTicket ist的包。 ...但是... AbcTicket用實體註釋。這種類型是否掃描? –