如何使用JPA将MySQL时间戳字段持久化为java中的长(历元)字段?

如何使用JPA将MySQL时间戳字段持久化为java中的长(历元)字段?,java,mysql,jpa,Java,Mysql,Jpa,我在MySQL表中有一列,如: createdAt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP`. 我希望它存储在如下字段中: private Long createdAt; 我将如何做到这一点?只要在TemporalType枚举中使用支持的类型,就可以使用上面的@TemporalType(TemporalType.TIMESTAMP)创建数据。long需要一个转换器 这里有一个用于long的转换器: import java.sql.Timest

我在MySQL表中有一列,如:

createdAt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP`.
我希望它存储在如下字段中:

private Long createdAt;

我将如何做到这一点?

只要在
TemporalType
枚举中使用支持的类型,就可以使用上面的
@TemporalType(TemporalType.TIMESTAMP)
创建数据。long需要一个转换器

这里有一个用于long的转换器:

import java.sql.Timestamp;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LongConverter implements AttributeConverter<Long, Timestamp> {

   @Override
   public Timestamp convertToDatabaseColumn(Long attribute) {
      if (attribute == null)
         return null;
      return new Timestamp(attribute);
   }

   @Override
   public Long convertToEntityAttribute(Timestamp dbData) {
      if (dbData == null)
         return null;
      return dbData.getTime();

   }

}
导入java.sql.Timestamp;
导入javax.persistence.AttributeConverter;
导入javax.persistence.Converter;
@转换器(自动应用=真)
公共类LongConverter实现AttributeConverter{
@凌驾
公共时间戳convertToDatabaseColumn(长属性){
if(属性==null)
返回null;
返回新的时间戳(属性);
}
@凌驾
公共长convertToEntityAttribute(时间戳dbData){
if(dbData==null)
返回null;
返回dbData.getTime();
}
}

但是
时间戳!=Long
?谢谢,我如何在我的Long字段中调用转换器?(我不希望它在每个长字段上都被调用——只是那些映射到MySQL时间戳的字段)只要把它放到JPA可以发现的任何地方,它就会在每个持久字段上完成这项工作。别担心它足够聪明,它只会在sql列上转换。有一件事,我不确定是否需要空检查。如果为空,它甚至可能不会尝试转换。注意:这需要JPA2.1。在之前的一篇帖子中,@DonRhummy正在使用OpenJPA。。。这不是JPA2.1版的最后一次looked@NeilStockton转换器在JPA2.0中不起作用?(openjpa-2.4.2的版本通过了JPA2.0TCK)