2015-03-26 16 views
7

Tôi đang sử dụng khởi động mùa xuân 1.2.2 với hibernate.version: 4.3.6.Thực hiện cho một thao tác đơn giản và đang sử dụng @Converter để ánh xạ trường java8 LocalDateTime để dấu thời gian.@Converter chú thích lớp không nhận được tự động phát hiện trong mùa xuân khởi động dự án

Trong lớp chuyển đổi của mình, tôi đã sử dụng autoApply = true như dưới đây.

@Converter(autoApply = true) 
public class LocalDateTimePersistenceConverter implements 
    AttributeConverter { 
    @Override 
    public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue) { 
     return Timestamp.valueOf(entityValue); 
    } 

    @Override 
    public LocalDateTime convertToEntityAttribute(java.sql.Timestamp databaseValue) { 
     return databaseValue.toLocalDateTime(); 
    } 
} 

Tuy nhiên, tôi vẫn phải sử dụng @Convert trên thực thể của mình. Lớp chuyển đổi là một phần của các gói tôi quét. Có phải điều gì đó mà tôi phải làm để làm việc này tự động mà không cần sử dụng @Convert trên tất cả các mục nhập DB không?

:: Ngoài ::

Đây là DB Config tôi

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
    lef.setDataSource(dataSource()); 
    lef.setJpaVendorAdapter(jpaVendorAdapter()); 
    lef.setPackagesToScan("path to domain and Converter class"); 
    lef.afterPropertiesSet(); 
    return lef; 
} 

@Bean 
public JpaTransactionManager transactionManager() { 
    JpaTransactionManager transactionManager = new JpaTransactionManager(); 
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
    return transactionManager; 
} 

@Bean 
public JpaVendorAdapter jpaVendorAdapter() { 
    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
    adapter.setDatabase(Database.ORACLE); 
    adapter.setShowSql(false); 
    adapter.setGenerateDdl(false); 
    return adapter; 
} 
+0

Và '@ Converter' là gì? Spring chỉ phát hiện các bean được chú thích '@ Component' (hoặc các bean được chú thích một chú thích mà chính nó được chú thích bằng' @ Component' như '@ Service'.). –

+0

Đồng ý @ M.Deinum nhưng tôi cấu hình ngủ đông và cũng đã xác định các gói cho Hibernate để quét. Tôi cũng đã cập nhật câu hỏi với lớp Cơ sở dữ liệu và Hibernate Config của mình. Tôi đoán, tôi đang thiếu một cái gì đó ... Tôi không chắc chắn nó là gì? – Varesh

+0

Bạn đang sử dụng Spring Boot để cấu hình mọi thứ bằng tay. Nhưng một lần nữa '@ Converter' là gì nếu nó không phải là' 'Component', nó không làm gì cả. Ngoài ra hibernate có thể cần phải biết về nó thay vì mùa xuân. –

Trả lời

5

Điều duy nhất tôi có thể thấy là bạn có thể cần phải thay đổi dòng này dưới

public class LocalDateTimePersistenceConverter implements 
AttributeConverter<java.sql.Timestamp, LocaleDateTime> 

Do đó, mùa xuân sẽ biết cách tự động chuyển đổi loại thuộc tính nào.

+0

Cảm ơn bạn ... Đây thực sự là sai lầm. – Varesh

4

Trình tự là không chính xác, nó phải là:

public class LocalDateTimePersistenceConverter implements 
    AttributeConverter<LocaleDateTime, java.sql.Timestamp> 

Theo các tiểu bang Javadoc:

javax.persistence.AttributeConverter<X, Y> 
Parameters: 
    X the type of the entity attribute 
    Y the type of the database column 
Các vấn đề liên quan