我想知道JPA是否提供任何机制来使具有Date字段的实体持久保存?
例如
@Entity
public class Trade {
@Id
@GeneratedValue
private long id;
// some jpa magic here maybe?
private Date date;
...
}
持久化时,此实体数据库仅将long保留为字段。但是,当将该实体实例化时,它将转换为Date。
当所有数据库资料都经过手工编码后,您可以根据需要轻松地执行此操作。我试图获得直接访问数据库时的灵活性,但是我想使用JPA做到这一点。到目前为止,这是我唯一不知道如何正确执行操作的方法。
更新
日期类型仅作为示例,我的意思是某种自定义类型,我知道从原始类型转换为自定义实例的逻辑...
最佳答案
如果要将java.util.Date
存储为long
,则需要使用转换器(自JPA 2.1开始)。例如。:
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)
关于java - 持久化或实例化JPA时如何转换属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25486649/