2015-03-26 5 views
7

Ich benutze Spring-Boot 1.2.2 mit Hibernate.Version: 4.3.6.Final für eine einfache Operation und war mit dem @Converter für Mapping java8 LocalDateTime Feld Zeitstempel.@Converter annotierte Klasse nicht automatisch im Frühjahr-Boot-Projekt erkannt

In meiner Konverterklasse verwendete ich autoApply = true wie unten.

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

Allerdings muss ich immer noch die @Convert auf meine Entität verwenden. Die Konverterklasse ist Teil der Pakete, die ich scanne. Muss ich etwas tun, damit das automatisch funktioniert, ohne @Convert für alle DB-Einträge zu verwenden?

:: Zusätzlich ::

Hier ist mein 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

Und '@ Converter' ist was? Spring erkennt nur annotierte "@ Component" -Bohnen (oder Bohnen, die mit einer Annotation versehen sind, die selbst mit "@ Component" wie "@ Service" versehen ist.). –

+0

Agreed @ M.Deinum, aber ich konfiguriere auch Hibernate und hat die Pakete für Hibernate zu scannen definiert. Ich habe die Frage auch mit meiner Datenbank- und Hibernate Config-Klasse aktualisiert. Ich vermute, ich vermisse etwas ... Ich bin mir nicht sicher, was es ist? – Varesh

+0

Sie verwenden Spring Boot, warum alles von Hand konfigurieren. Aber wieder was ist '@ Converter' wenn es keine' @ Komponente' ist, tut es nichts. Auch Winterschlaf muss wahrscheinlich darüber statt Frühling wissen. –

Antwort

5

Das einzige, was ich sehen kann, ist diese Zeile

unten ändern müssen kann
public class LocalDateTimePersistenceConverter implements 
AttributeConverter<java.sql.Timestamp, LocaleDateTime> 

Daher Frühling würde wissen, wie man automatisch welche Art von Attributen konvertiert.

+0

Danke ... Das war in der Tat der Fehler. – Varesh

4

Die Reihenfolge falsch ist, sollte es sein:

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

Wie die Javadoc heißt es:

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