java - 使用 JPA 持久化或实例化时如何转换属性?

标签 java database jpa

我想知道 JPA 是否提供任何机制来持久保存具有日期字段的实体?

例如

@Entity
public class Trade {
    @Id
    @GeneratedValue
    private long id;

    // some jpa magic here maybe?
    private Date date;
    ...
}

当持久化此实体数据库时,仅将长整型保留为字段...但是当实例化此实体时,它将长整型转换为日期。

当所有数据库内容都是手工编码时,如果您愿意,您可以轻松地做到这一点。我试图达到直接访问数据库时的灵 active ,但我想使用 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/

相关文章:

mysql - 数据库已经填充并运行后是否可以完成分片解决方案

java - hibernate error java.lang.ClassNotFoundException : javax. persistence.Persistence 是什么意思?

java - 我在哪里可以下载 Java comm api?

java - 我怎么知道我有哪个版本的 servlet-api.jar?

java - Java中的数组声明

c# - 使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库

mysql - 从联接表中选择具有多次出现的列值的行

java - Hibernate搜索可以与eclipse JPA提供程序一起使用吗?

java - 如何管理多对一jpa以使用DTO保存和查找数据

java - 如何控制有界源 split ?