因此,我将此对象保存到数据库中,其中一个属性是 dateCreated
,当然,它保存为 MySQL 时间戳。但是在将数据发送到客户端时,我希望以毫秒为单位。现在,我已将其映射到 Date
对象,并将其进一步转换为毫秒。但我想,如果我可以映射我的 POJO 以使其在几毫秒内检索值会怎样。这是我尝试过的。
OmsJob:
@Entity
@EntityListeners(PreventAnyUpdate.class)
@ConfigurationProperties("omsjob")
@Table(name = "OMSJob")
public class OmsJob {
@Id
@NotNull
@Column(name = "jobId")
private String id;
@NotNull
private Long dateCreated; // If I map this property to Date, it works fine
}
我想添加一个自定义转换器,将 java.util.Date
或 java.sql.Date
转换为毫秒。但它不起作用:
@Component
@ConfigurationPropertiesBinding
public class DateConverter implements Converter<Date, Long> {
@Override
public Long convert(Date date) {
return date.getTime();
}
}
我收到的错误非常明显,但是有什么方法可以实现我想要的结果吗?
ERROR 229770 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Unsupported conversion from TIMESTAMP to java.lang.Long
最佳答案
在您声明属性之前,它不会知道其转换器。执行如下操作:
@NotNull
@Convert (converter = DateConverter.class)
private Long dateCreated;
此外,按如下方式更改转换器:
public class DateConverter implements AttributeConverter<Date, Long> {
@Override
public Date convertToDatabaseColumn(Long millis) {
retrun new Date(millis);
}
@Override
public Long convertToEntityAttribute(Date date) {
return date.getTime();
}
}
关于java - 有没有办法将 MySql TIMESTAMP 映射到 java.lang.Long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65182984/