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

rad*_*lan 2 java mapping jpa sqldatatypes

假设以下实体:

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

    private File path;

    private String someString;
}
Run Code Online (Sandbox Code Playgroud)

我想映射到这样的表:

CREATE TABLE (id BIGINT, path VARCHAR, somestring VARCHAR);
Run Code Online (Sandbox Code Playgroud)

问题在于从java.io.File(或java.nio.file.Path)到表示文件路径的简单字符串的映射。JPA可以进行这种映射吗?

当然,我可以定义path为字符串,然后让客户端创建Fileor Path对象。但是,直接在实体中提供这些对象要方便得多。

WPr*_*cht 5

问题File不仅仅是路径。虽然它是可序列化的,但不会映射到VARCHAR中。如果只需要路径,则需要添加使file.getPath()成为实体和Fileobject的一部分@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();
}
Run Code Online (Sandbox Code Playgroud)

}