有没有办法将MySql时间戳映射到java.lang.Long?

有没有办法将MySql时间戳映射到java.lang.Long?,java,mysql,jpa,spring-data-jpa,spring-data,Java,Mysql,Jpa,Spring Data Jpa,Spring Data,因此,我将这个对象保存到数据库中,其中一个属性是dateCreated,当然,它保存为MySQL时间戳。但在向客户端发送数据时,我希望以毫秒为单位。现在,我已经将其映射到Date对象,并进一步将其转换为毫秒。但我想,如果我能够以这样一种方式映射POJO,它可以在毫秒内检索值,那该怎么办呢。这是我试过的 工作: @实体 @EntityListeners(PreventAnyUpdate.class) @配置属性(“omsjob”) @表(name=“OMSJob”) 公营职业{ @身份证 @Not

因此,我将这个对象保存到数据库中,其中一个属性是
dateCreated
,当然,它保存为MySQL时间戳。但在向客户端发送数据时,我希望以毫秒为单位。现在,我已经将其映射到
Date
对象,并进一步将其转换为毫秒。但我想,如果我能够以这样一种方式映射POJO,它可以在毫秒内检索值,那该怎么办呢。这是我试过的

工作:

@实体
@EntityListeners(PreventAnyUpdate.class)
@配置属性(“omsjob”)
@表(name=“OMSJob”)
公营职业{
@身份证
@NotNull
@列(name=“jobId”)
私有字符串id;
@NotNull
private Long dateCreated;//如果我将此属性映射到Date,它就可以正常工作
}
我想我将添加一个自定义转换器,它将
java.util.Date
java.sql.Date
转换为毫秒。但它不起作用:

@组件
@配置属性绑定
公共类DateConverter实现转换器{
@凌驾
公共长转换(日期){
返回日期。getTime();
}
}
我犯的错误是很明显的,但是有没有办法达到我想要达到的目的呢

错误229770---[main]o.h.engine.jdbc.spi.SqlExceptionHelper:不支持从时间戳到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();
    }
}
另外,按如下方式更换转换器:

@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();
    }
}
公共类DateConverter实现AttributeConverter{
@凌驾
公共日期转换器DatabaseColumn(长毫秒){
重新运行新日期(毫秒);
}
@凌驾
公共长convertToEntityAttribute(日期){
返回日期。getTime();
}
}

为什么要这样做?您应该将它映射到
java.time.LocalDateTime
-如何将数据发送到客户端与java代码中的表示无关。@a\u horse\u带有\u no\u name no,而不是
LocalDateTime
。MySQL中的
时间戳
类型类似于带时区的SQL标准类型
时间戳
,其帧距UTC的偏移量为零。因此Java中的等效类型是
Instant
OffsetDateTime
。JDBC 4.2规范要求所有JDBC驱动程序都支持
OffsetDateTime
,但不支持
Instant
(奇怪)。@BasilBourque:谢谢,我不知道。根据SQL标准,
时间戳
相当于没有时区的
时间戳
——但是,假设MySQL从一开始就关心这一点可能是愚蠢的。请注意,您的方法涉及数据丢失。类型解析为微秒,比您计划的毫秒更精细。@a_horse_,带有_no_name no,不是SQL标准。我是说MySQL定义了它的
时间戳
值,与UTC的偏移量为零小时分秒。这使得MySQL类型类似于SQL标准的带有时区的时间戳类型。SQL标准不涉及任何实现,例如MySQL。