这个问题通常发生在Spring中使用JPA或Hibernate时,由于最新版本的HibernateJpaVendorAdapter类默认使用JpaVendor中的projection属性,而不是HibernateJpaVendorAdapter中的projection属性。要解决这个问题,可以使用以下代码示例:
@Configuration @EnableJpaRepositories( basePackages = {"com.example.repository"}, entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager" ) public class PersistenceConfig {
@Primary
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
...
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.MYSQL);
vendorAdapter.setShowSql(true);
vendorAdapter.setGenerateDdl(false);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
vendorAdapter.setPrepareConnection(true);
//下面这行代码是解决问题的关键,强制使用HibernateJpaVendorAdapter中的projection属性
vendorAdapter.setJpaPropertyMap(Collections.singletonMap("hibernate.temp.use_jdbc_metadata_defaults",false));
...
}
@Primary
@Bean
public PlatformTransactionManager transactionManager() {
...
}
}