【发布时间】:2017-01-09 14:49:16
【问题描述】:
SSCCE 在这里:https://github.com/dims12/TrySpringJpaPlusHibernate
我正在尝试在没有 persistence.xml 的情况下运行 Spring JPA 并具有以下配置:
@Configuration
@ComponentScan
@ImportResource("classpath:data_source.xml")
@EnableJpaRepositories("org.inthemoon.train.chinese.repositories")
public class BaseConfig {
@Autowired
private DataSource dataSource;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean ans =
new LocalContainerEntityManagerFactoryBean();
ans.setDataSource(dataSource);
ans.setJpaVendorAdapter(jpaVendorAdapter());
ans.setPackagesToScan("org.inthemoon.train.chinese.data");
return ans;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter ans = new HibernateJpaVendorAdapter();
ans.setShowSql(false);
ans.setGenerateDdl(true);
ans.setDatabase(Database.H2);
return ans;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager ans = new JpaTransactionManager();
ans.setEntityManagerFactory(emf);
return ans;
}
}
它会导致以下异常
Exception in thread "main" org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;
...
附:有什么方法可以从第一次尝试配置IoC?
更新
我正在使用以下库:
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.5.Final'
compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '1.10.5.RELEASE'
更新 2
我尝试了 8 个不同版本的 hibernate-core 来构建 1.10.5.RELEASE 的 spring-jpa。
从5.2.1 到5.2.6 的版本导致了同样的异常
NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;
版本 5.1.3 和 5.0.11 导致
ClassNotFoundException: org.hibernate.ejb.HibernateEntityManagerFactory
唯一导致更复杂问题的版本是5.2.0。这是造成
SchemaManagementException: Attempt to resolve foreign key metadata from JDBC metadata failed to find column mappings for foreign key named [FKLOK22W31RKBMIIC2J96T9LTCN
出现的问题:
1)这是否意味着版本5.2.0与1.10.5兼容?
2) 如果没有实验,我怎么会知道这一点?
3) 以这种方式猜测版本是否正常?依赖管理工具的目的不就是避免这些事情吗?如果spring-data-jpa:1.10.5 依赖于5.2.0 的休眠,那么为什么不在POM 中描述呢?
更新 3
开箱即用示例:https://github.com/dims12/TrySpringJpaPlusHibernate
它不起作用。
【问题讨论】:
-
JPA 和 Hibernate 的不兼容版本
-
@shazin 如何找到兼容的配对?
-
根据 spring-data-jpa 的 pom 文件,spring-data-jpa 的 1.10.x 行似乎支持 hibernate 5.2.x:github.com/spring-projects/spring-data-jpa/blob/1.10.x/pom.xml
-
@LucasP 那么为什么它不起作用?
-
您是否将项目部署在应用服务器中,该服务器可能还提供不同版本的休眠库?还是你有其他版本冲突?你能发布
mvn dependency:tree的输出吗?
标签: java spring hibernate spring-data-jpa compatibility