我想知道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/

10-14 10:58