如何使用JPA将MySQL时间戳字段持久化为java中的长(历元)字段?
我在MySQL表中有一列,如:如何使用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
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)