2015-03-26 10 views
7

Sto usando spring-boot 1.2.2 con hibernate.version: 4.3.6.Finale per una semplice operazione e stavo usando il @Converter per mappare il campo java8 LocalDateTime per timestamp.@Converter classe annotata che non viene rilevata automaticamente nel progetto Spring-boot

Nella mia classe di convertitore, ho usato autoApply = true come di seguito.

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

Tuttavia, devo ancora utilizzare @Convert sulla mia entità. La classe del convertitore è parte dei pacchetti che scrivo. È qualcosa che devo fare per farlo funzionare automaticamente senza usare @Convert su tutte le voci del DB?

:: :: Inoltre

Ecco il mio DB Config

@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

E '@ Converter' è ciò? Spring rileva solo i bean annotati '@ Component' (o i bean annotati con un'annotazione che è annotata con' @ Component' come '@ Service'.). –

+0

Concordato @ M.Deinum ma sto configurando anche Hibernate e ho definito i pacchetti per Hibernate per la scansione. Ho anche aggiornato la domanda con la mia classe Database e Hibernate Config. Sto indovinando, mi manca qualcosa ... Non sono sicuro di cosa si tratta? – Varesh

+0

Si sta utilizzando Spring Boot perché si configura tutto manualmente. Ma ancora una volta cosa è '@ Converter' se non è un' @ Component' non fa nulla. Anche il letargo probabilmente deve saperlo al posto della primavera. –

risposta

5

L'unica cosa che posso vedere è potrebbe essere necessario modificare questa riga sotto

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

Pertanto, Primavera saprebbe come convertire automaticamente il tipo di attributi.

+0

Grazie ... Questo è stato davvero l'errore. – Varesh

4

L'ordine è corretto, dovrebbe essere:

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

Come afferma il Javadoc:

javax.persistence.AttributeConverter<X, Y> 
Parameters: 
    X the type of the entity attribute 
    Y the type of the database column 
Problemi correlati