2011-12-26 49 views
6

tôi đang cố gắng tích hợp Hibernate 4.0.0.FINAL với Spring 3.1.0.RELEASE sử dụng @Configuration.Spring + Hibernate: LocalSessionFactoryBean - NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext

Sau đó, vấn đề này xảy ra:

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

Đây là PersistenceHibernateConfig tập tin của tôi

@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); 
      } 
     }; 
    } 
} 

Tôi nghĩ rằng nó có thể là một vấn đề với LocalSessionFactoryBean nhưng tôi không thể hiểu được những gì là sai. Tôi có thể thiếu một cái gì đó.

Tôi phát hiện ra rằng đó là do thiếu hibernate-annotation.jar nếu nó là 3.x Không biết tại sao trong 4.0 chú thích: org.hibernate.cfg.annotations.reflection.XMLContext ở chế độ ngủ đông- tập tin jar cốt lõi và nó vẫn còn lỗi.

Cảm ơn bạn trước

+0

Bạn đã thử điều này với phiên bản thấp hơn của ngủ đông? –

+0

. Nếu nó có thể sửa chữa trong Hibernate 4. Nó sẽ là tuyệt vời. – xyzxyz442

+0

Thay đổi thành Hibernate 3.6.9. Có lỗi khác: Không tương thíchClassChangeError: class org.hibernate.cfg.ExtendedMappings có giao diện org.hibernate.cfg.Mappings làm siêu lớp – xyzxyz442

Trả lời

7

OK Điều này nghe có vẻ như bạn đang gặp sự cố cung cấp các phiên bản tương thích của tất cả các phụ thuộc bắt buộc. Dưới đây là một vài suy nghĩ về những gì có thể sai:

  1. Có vẻ như bạn đang sử dụng Maven hoặc tương tự để quản lý các phụ thuộc của bạn. Sử dụng một công cụ tự động để quản lý các phụ thuộc của bạn được khuyến khích vì nó rất khó/lỗi dễ dàng để cung cấp tất cả các phụ thuộc theo yêu cầu một cách thủ công. Điều đó nói rằng bạn sẽ có thể tải xuống bản phát hành trong tệp zip chứa tất cả các lọ bắt buộc từ here. Đây có phải là những gì bạn đã làm không?

  2. Lõi Hibernate phụ thuộc vào hibernate-commons-annotations.jar. Tất cả các chú thích có trong chú thích ngủ đông đều nằm trong bình lõi trong một thời gian. Vì vậy, bạn cần hibernate-commons-annotations.jar không hibernate-annotations.jar

+0

1: Vâng, tôi đã làm. Tải xuống từ [link] (http://sourceforge.net/projects/hibernate/files/hibernate4/4.0.0.Final/) 2: Ok Nhân tiện tôi không sử dụng Maven. Tôi chạy dự án này với Netbean IDE. Tôi đoán có sth với IDE chính nó quá. Tôi đã khởi động lại tất cả mọi thứ và sửa chữa là làm việc tốt. Cảm tạ. – xyzxyz442

+0

Rất vui vì bạn đã sắp xếp nó. –

Các vấn đề liên quan