草庐IT

java - 春+ hibernate : LocalSessionFactoryBean - NoSuchMethodError: org. hibernate.cfg.annotations.reflection.XMLContext

coder 2024-03-30 原文

我正在尝试将 Hibernate 4.0.0.FINALSpring 3.1.0.RELEASE 集成 使用 @Configuration

之后出现这个问题:

BeanCreationException: Error creating bean with name 'alertsSessionFactoryBean'
NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext$Default.getDelimitedIdentifier()Ljava/lang/Boolean;

这是我的PersistenceHibernateConfig 文件

@Configuration
@EnableTransactionManagement
public class PersistenceHibernateConfig {

    @Value("${jdbc.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.url}")
    private String url;

    @Value("${hibernate.dialect}")
    String hibernateDialect;

    @Value("${hibernate.show_sql}")
    boolean hibernateShowSql;

    @Value("${hibernate.hbm2ddl.auto}")
    String hibernateHbm2ddlAuto;

    @Bean
    public LocalSessionFactoryBean alertsSessionFactoryBean() {
        final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(this.restDataSource());
        sessionFactory.setPackagesToScan(new String[]{"com.cloudlb"});
        sessionFactory.setHibernateProperties(this.hibernateProperties());
    
        return sessionFactory;
    }

    @Bean
    public DataSource restDataSource() {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(this.driverClassName);
        dataSource.setUrl(this.url);
        dataSource.setUsername("test");
        dataSource.setPassword("1234");

        return dataSource;
    }

    @Bean
    public HibernateTransactionManager transactionManager() {
        final HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(this.alertsSessionFactoryBean().getObject());

        return txManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslationPostProcessor() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

    @Bean
    public PersistenceExceptionTranslator exceptionTranslator() {
        return new HibernateExceptionTranslator();
    }

    final Properties hibernateProperties() {
        return new Properties() {
            {
                this.put("persistence.dialect", PersistenceHibernateConfig.this.hibernateDialect);
                this.put("hibernate.hbm2ddl.auto", PersistenceHibernateConfig.this.hibernateHbm2ddlAuto);
                this.put("hibernate.show_sql", PersistenceHibernateConfig.this.hibernateShowSql);
            }
        };
    }
}

我认为这可能是 LocalSessionFactoryBean 的问题,但我不明白哪里出了问题。我可能遗漏了一些东西。

我发现如果是3.x的话是因为缺少hibernate-annotation.jar 不知道为什么在 4.0 中注释:org.hibernate.cfg.annotations.reflection.XMLContext 在 hibernate-core jar 文件中,它仍然出错。

最佳答案

好的,这听起来很像是您在提供所有必需依赖项的兼容版本时遇到了问题。以下是一些可能出错的想法:

  1. 这听起来不像是您在使用 Maven 或类似工具来管理您的依赖项。强烈建议使用自动工具来管理依赖项,因为手动提供所有必需的依赖项非常困难/容易出错。那就是说你应该能够下载一个 zip 文件中的版本,其中包含来自 here 的所有必需的 jar。 .这是你做的吗?

  2. Hibernate 核心依赖于 hibernate-commons-annotations.jar。 hibernate-annotations 中的所有注释现在都在核心 jar 中。所以你需要 hibernate-commons-annotations.jar 而不是 hibernate-annotations.jar

关于java - 春+ hibernate : LocalSessionFactoryBean - NoSuchMethodError: org. hibernate.cfg.annotations.reflection.XMLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632743/

有关java - 春+ hibernate : LocalSessionFactoryBean - NoSuchMethodError: org. hibernate.cfg.annotations.reflection.XMLContext的更多相关文章

随机推荐