如何将Long映射到列datetime

时间:2014-11-14 06:32:54

标签: hibernate

我的列类型是datetime

`firstExpressTime` datetime NOT NULL ,

我的财产很长 我用

@Column(nullable=false)
private Long firstExpressTime;

但是当我保存实体时,它报告了删除

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1415945797963' for column 'firstExpressTime' at row 1

如何解决?在此提前感谢您的任何帮助和建议。

2 个答案:

答案 0 :(得分:1)

您应该使用 AttributeConverter。像这样注释你的 Long 字段:

@Convert(converter = DateToLongConverter.class)
    private Long birthdate;

并创建您的转换器类:

@Converter
public class DateToLongConverter implements AttributeConverter<Long, Date> {
    @Override
    public Date convertToDatabaseColumn(Long attribute) {
        return new Date(attribute);
    }

    @Override
    public Long convertToEntityAttribute(Date dbData) {
        return dbData.getTime();
    }
}

答案 1 :(得分:0)

由于在数据库中使用datetime,因此需要在Java / Hibernate代码中使用java.util.Date。

但是,我认为这不应该是一个太大的问题,因为您可以通过调用getTime()随时获取基础时间戳

DbHibernateObj obj = service.getMyObject(id);
long timestamp = obj.getFirstExpressTime().getTime();