Spring JPA - org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean нельзя отнести к javax.persistence.EntityManagerFactory
в настоящий момент im пытается получить пример JPA, работающий с spring загрузкой
(http://spring.io/guides/tutorials/data/3/).
Когда я использую код из примера:
@Bean
public DataSource dataSource() throws SQLException {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.H2).build();
}
@Bean
public EntityManagerFactory entityManagerFactory() throws SQLException {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.yummynoodlebar.persistence.domain");
factory.setDataSource(dataSource());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public EntityManager entityManager(EntityManagerFactory entityManagerFactory) {
return entityManagerFactory.createEntityManager();
}
@Bean
public PlatformTransactionManager transactionManager() throws SQLException {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory());
return txManager;
}
@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator() {
return new HibernateExceptionTranslator();
}
Я всегда получаю исключение "Причиной является: java.lang.ClassCastException: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean $$ EnhancerBySpringCGLIB $$ 3cbaf28d нельзя передать в javax.persistence.EntityManagerFactory".
Я использую этот пример с собственным источником данных:
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("user");
dataSource.setMaxTotal(5);
dataSource.setInitialSize(2);
dataSource.setPassword("pw");
dataSource.setUrl("jdbc:mysql://localhost/data");
return dataSource;
}
Когда я рисую некоторые вещи, все работает нормально:
Я изменяю "EntityManagerFactory" -Method на:
public LocalContainerEntityManagerFactoryBean entityManagerFactory() ...
и метод transactionManager:
public PlatformTransactionManager transactionManager(
EntityManagerFactory emf) throws SQLException {
и установите EntityManagerFactory непосредственно через переменную метода "emf".
Почему это?
Может кто-нибудь объяснить мне, почему пример из учебника не работает? Я использую драйвер mysql для этого проекта.
Спасибо!
Привет
Ответы
Ответ 1
это может помочь:
@Bean
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
transactionManager.setDataSource(dataSource());
transactionManager.setJpaDialect(jpaDialect());
return transactionManager;
}
Ответ 2
Попробуйте создать TransactionManager в конфигурации XML, например:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
И импортировать с помощью аннотации:
@ImportResource("classpath*:/config.xml")