BeanPropertyRowMapper 不再理解 joda 时间类型,因为升级到 spring boot 1.4 / spring cloud camden

BeanPropertyRowMapper does not understand joda time types anymore since upgrading to spring boot 1.4 / spring cloud camden

我有一个 Spring 批处理作业,它定义了 JdbcPagingItemReaderBeanPropertyRowMapper :

JdbcPagingItemReader<RawNotice> reader = new JdbcPagingItemReader<>();
final SqlPagingQueryProviderFactoryBean sqlPagingQueryProviderFactoryBean = new SqlPagingQueryProviderFactoryBean();
sqlPagingQueryProviderFactoryBean.setDataSource(dataSource);
sqlPagingQueryProviderFactoryBean.setSelectClause("select *");
sqlPagingQueryProviderFactoryBean.setFromClause("from a_table");
sqlPagingQueryProviderFactoryBean.setWhereClause("state = :state");
sqlPagingQueryProviderFactoryBean.setSortKey("id");

Map<String, Object> parameters = new HashMap<>();
parameters.put("state", "interesting_state");

reader.setQueryProvider(sqlPagingQueryProviderFactoryBean.getObject());
reader.setDataSource(dataSource);
reader.setPageSize(10);
// The line below is the interesting one
reader.setRowMapper(new BeanPropertyRowMapper<>(MyEntity.class));
reader.setParameterValues(parameters);
return reader;

这过去工作正常,但自从我们升级到 spring boot 1.4 和 spring cloud Camden 后,它抛出异常:

org.springframework.beans.ConversionNotSupportedException: 无法将类型 [java.sql.Timestamp] 的 属性 值转换为 属性 'ADateColumn' 所需的类型 [org.joda.time.LocalDateTime] ;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.sql.Timestamp] 的值转换为 属性 所需的类型 [org.joda.time.LocalDateTime] 'ADateColumn':找不到匹配的编辑器或转换策略

列 ADateColumn 声明为 Joda LocalDateTime 并在数据库中存储为 java.sql.Timestamp。

我很清楚我可以将我自己的 joda 转换器添加到 BeanPropertyRawMapper conversionService 中,或者创建一个理解 Java LocalDateTime 的 PropertyEditor,但这看起来更像是一个配置问题,就像有些东西不是'尚未注册。

有人 solution/suggestion 可以解决这个问题吗?

谢谢!


这是实体中存在问题的部分:

@Entity
@EqualsAndHashCode(of = { "..." })
@ToString(of = { .... })
public class MyEntity {

    @Getter
    @Setter
    @Id
    @GeneratedValue
    private Long id;

    @Getter
    @Version
    @Column(nullable = false)
    private int version;

    //<--- snip --->

    @Getter
    @Setter
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
    private LocalDateTime aDateColumn;

}

Hibernate 是 4.3 版。11.Final

JPA 是带有 Hibernate Entity Manager 4.3 的 2.1 版。11.Final

所以我最终用自定义 Joda 转换器创建了自己的 BeanPropertyRowMapper :/