我正在尝试构建一个依赖于JPA2的实现不可知的maven模块.不幸的是,唯一的Maven JPA依赖是基于JPA1,因此,我不能使用EntityManager.detach()方法,因为它只是JPA2选项.
理想情况下,我希望能够在我的Pom中指定我的javax.persistence依赖项,并要求app/container提供JPA2实现.不幸的是,我找不到任何这样的依赖.
在这一点上,我唯一的选择是将hibernate-jpa-2.0-api 1.0.0.FINAL声明为提供的依赖项吗?
我在我的应用程序中使用Spring 4.3.0.RELEASE和Hibernate 5.0.9.Final,我一直在使用
java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map;
Run Code Online (Sandbox Code Playgroud)
如果我更新Hibernate 5.2.0.Final,一切正常.看来Spring 4.3.0与Hibernate 5.0不兼容,这是正确的吗?我无法找到任何不支持Hibernate 5.0的内容.
在Hibernate 5.2中,存在这样的方法,在Hibernate 5.0中,该方法尚不存在(只需用URL替换5.2和5.0):http: //docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/发动机/ SPI/SessionFactoryImplementor.html
我创建了简单的重现器:https: //github.com/trepel/spring43-hibernate50-error
感谢你的回复.
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Bean(destroyMethod = "shutdown")
public DataSource dataSource(){
EmbeddedDatabaseBuilder databaseBuilder = new EmbeddedDatabaseBuilder();
databaseBuilder.setType(EmbeddedDatabaseType.H2);
databaseBuilder.addScript("classpath:db/migration/V1__Create_Books_Table.sql");
databaseBuilder.addScript("classpath:db/migration/V2__Add_Books.sql");
return databaseBuilder.build();
}
@Bean
public JpaVendorAdapter vendorAdapter(){
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
vendorAdapter.setDatabase(Database.H2);
vendorAdapter.setShowSql(true);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.H2Dialect");
return vendorAdapter;
}
@Bean(name = "entityManagerFactory")
public EntityManagerFactory managerFactory(){
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.hbm2ddl.auto", "create-drop");
LocalContainerEntityManagerFactoryBean managerFactoryBean = new LocalContainerEntityManagerFactoryBean();
managerFactoryBean.setDataSource(dataSource());
managerFactoryBean.setJpaVendorAdapter(vendorAdapter());
managerFactoryBean.setPackagesToScan("com.sammy");
managerFactoryBean.setJpaProperties(jpaProperties);
managerFactoryBean.afterPropertiesSet();
return managerFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(managerFactory());
return transactionManager;
}
}
Run Code Online (Sandbox Code Playgroud)
那是我的配置类,我的gradle构建文件是 …