Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@在spring引导项目中未自动检测到转换器注释类_Spring_Hibernate_Type Conversion_Spring Boot_Jpa 2.1 - Fatal编程技术网

@在spring引导项目中未自动检测到转换器注释类

@在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 {

我将SpringBoot1.2.2与hibernate一起使用。版本:4.3.6.Final用于一个简单的操作,并使用@Converter将Java8LocalDateTime字段映射到时间戳

在我的converter类中,我使用autoApply=true,如下所示

@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实体所在的包以及
转换器的包。那么就不再需要自定义配置了(除非您需要)。谢谢您。。。这确实是个错误。