@在spring引导项目中未自动检测到转换器注释类
我将SpringBoot1.2.2与hibernate一起使用。版本:4.3.6.Final用于一个简单的操作,并使用@Converter将Java8LocalDateTime字段映射到时间戳 在我的converter类中,我使用autoApply=true,如下所示@在spring引导项目中未自动检测到转换器注释类,spring,hibernate,type-conversion,spring-boot,jpa-2.1,Spring,Hibernate,Type Conversion,Spring Boot,Jpa 2.1,我将SpringBoot1.2.2与hibernate一起使用。版本:4.3.6.Final用于一个简单的操作,并使用@Converter将Java8LocalDateTime字段映射到时间戳 在我的converter类中,我使用autoApply=true,如下所示 @Converter(autoApply = true) public class LocalDateTimePersistenceConverter implements AttributeConverter {
@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();
}
}
但是,我仍然必须在我的实体上使用@Convert。
converter类是我扫描的包的一部分。
我是否必须这样做才能让它自动工作,而不必在所有数据库条目上使用@Convert
::另外:
这是我的数据库配置
@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;
}
我唯一能看到的是你可能需要更改下面这行
public class LocalDateTimePersistenceConverter implements
AttributeConverter<java.sql.Timestamp, LocaleDateTime>
公共类LocalDateTimePersistenceConverter实现
属性转换器
因此,Spring知道如何自动转换哪种类型的属性。顺序不正确,应该是:
public class LocalDateTimePersistenceConverter implements
AttributeConverter<LocaleDateTime, java.sql.Timestamp>
公共类LocalDateTimePersistenceConverter实现
属性转换器
正如Javadoc所述:
javax.persistence.AttributeConverter<X, Y>
Parameters:
X the type of the entity attribute
Y the type of the database column
javax.persistence.AttributeConverter
参数:
X实体属性的类型
Y数据库列的类型
和@Converter
是什么?Spring只检测到@Component
带注释的bean(或带注释的bean,其本身带有@Component
的注释,如@Service
)。同意@M.Deinum,但我也在配置hibernate,并定义了hibernate要扫描的包。我还用我的数据库和Hibernate配置类更新了这个问题。我猜,我错过了一些东西。。。我不确定它是什么?你正在使用Spring Boot,为什么要手动配置所有东西。但是,如果它不是一个@组件
它什么也不做,那么什么是@Converter
。另外,hibernate可能需要了解它而不是spring。我同意,但我不知道如何让hibernate知道这个转换器。有没有办法告诉hibernate将此转换器嵌入到它已经拥有的转换器列表中..?您可以使用@EntityScan
并给它一个要扫描hibernate的包列表。您可以包括JPA实体所在的包以及转换器的包。那么就不再需要自定义配置了(除非您需要)。谢谢您。。。这确实是个错误。