我想知道JPA是否提供任何机制来持久保存具有Date字段的实体?
例如
@Entity
public class Trade {
@Id
@GeneratedValue
private long id;
// some jpa magic here maybe?
private Date date;
...
}
当持久化此实体数据库时,只保留long作为字段...但是当实例化该实体时,它会将long转换为Date。
当所有数据库内容都是手动编码时,如果需要,可以轻松执行此操作。我试图在直接访问数据库时获得灵活性,但我想使用JPA来做到这一点。到目前为止,这是我唯一不知道如何正确行事的方式。
日期类型只是一个例子,我的意思是一些自定义类型,我知道从原始实例转换为自定义实例的逻辑......
答案 0 :(得分:4)
如果要将java.util.Date
存储为long
,则需要使用转换器(因为JPA 2.1)。 e.g:
import javax.persistence.AttributeConverter;
public class MyConverter implements AttributeConverter<Date, Long> {
public Long convertToDatabaseColumn(Date attribute) {
return attribute.getTime();
}
public Date convertToEntityAttribute(Long dbData) {
return new Date(dbData);
}
}
该字段的注释:
@Convert(converter = MyConverter.class)
private Date date;
在Example Converter - Java Persistence/Basic Attributes - Wikibooks中查看更多内容(来自强烈推荐的书籍Java Persistence - Wikibooks)
答案 1 :(得分:1)
您可以使用时态注释
@Temporal(DATE)
protected java.util.Date date;