JPA将java.io.File或java.nio.file.Path对象映射到STRING列

时间:2013-03-13 12:07:04

标签: java jpa mapping sqldatatypes

假设以下实体:

@Entity
public class MyEntity {
    @Id
    private Long id;

    private File path;

    private String someString;
}

我要映射到这样一个表:

CREATE TABLE (id BIGINT, path VARCHAR, somestring VARCHAR);

问题在于从java.io.File(或java.nio.file.Path)到表示文件路径的简单字符串的映射。 这样的映射是否可以与JPA一起使用?

当然,我可以将path定义为字符串,让客户端创建FilePath对象。但是直接在实体中提供这些对象会更方便。

1 个答案:

答案 0 :(得分:4)

问题是File不仅仅是路径。虽然它是可序列化的,但它不会映射到VARCHAR。如果您只想要路径,则需要添加make实体的file.getPath()部分和File对象@Transient。这样,您可以保存数据库的路径,并在加载时仍然具有File对象。

这样的事情:

@Entity
public class MyEntity {
    @Id
    private Long id;

    @Transient
    private File file;

    private String filePath;

    private String someString;


public void setFilePath(File file) {
    filePath = file.getPath();
}

}