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 批处理作业,它定义了 JdbcPagingItemReader
和 BeanPropertyRowMapper
:
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
:/
我有一个 Spring 批处理作业,它定义了 JdbcPagingItemReader
和 BeanPropertyRowMapper
:
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
:/