2015-03-26 29 views
7

Używam Spring-Boot 1.2.2 z hibernacja.wersja: 4.3.6.Final dla prostej operacji i był przy użyciu @Converter do mapowania pola LocalDateTime java8 do znacznika czasu.Klasy adnotacji @Converter nie są automatycznie wykrywane w projekcie wiosennego rozruchu

W mojej klasie konwertera użyłem autoApply = true, jak poniżej.

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

Jednak nadal muszę korzystać z @Convert w mojej jednostce. Klasa konwertera jest częścią skanowanych pakietów. Czy jest to coś, co muszę zrobić, aby to działało automatycznie bez użycia @Convert we wszystkich wpisach DB?

:: Dodatkowo ::

Oto mój 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

i '@ Converter' jest co? Spring wykrywa tylko fasolę z adnotacjami "@ Component" (lub fasolę z adnotacją z adnotacją, która sama jest opatrzona adnotacją '@ Component' jak' @ Service'.). –

+0

Agreed @ M.Deinum, ale ja również konfiguruję hibernację i zdefiniowałem pakiety do skanowania w poszukiwaniu stanu hibernacji. Zaktualizowałem również pytanie za pomocą mojej klasy Database i Hibernate Config. Zgaduję, brakuje mi czegoś ... nie jestem pewien co to jest? – Varesh

+0

Używasz Spring Boot, dlaczego wszystko konfigurujesz ręcznie. Ale znowu, czym jest "@ Converter", jeśli nie jest '@ Component', to nic nie robi. Również hibernacja prawdopodobnie musi wiedzieć o tym, zamiast wiosną. –

Odpowiedz

5

Jedyne co mogę zobaczyć, to może trzeba zmienić tę linię poniżej

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

Dlatego, wiosna będzie wiedział, jak automatycznie przekonwertować jaki typ atrybutów.

+0

Dziękuję ... To był rzeczywiście błąd. – Varesh

4

kolejność jest nieprawidłowa, powinno być:

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

jako stanów Javadoc:

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