【发布时间】:2019-12-14 20:58:20
【问题描述】:
我有 2 个具有以下映射的实体
FileContent.java
@Entity
@Table(name="FILE_CONTENT", schema="COMMON")
public class FileContent implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FILE_ID")
private File docFile;
}
和File.java
@Entity
@Table(name="FILE", schema="COMMON")
public class File implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Column(name = "FILE_NAME")
private String fileName;
}
到目前为止,这个映射工作正常,因为我可以使用 fileContent.getDocFile() 获取 File。
那么我是否也可以将 FileContent 映射到 File 中? 我尝试以这种方式添加映射但它不起作用,当我使用 file.getFileContent(); 访问时我总是得到 null;
@Entity
@Table(name="FILE", schema="COMMON")
public class File implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Column(name = "FILE_NAME")
private String fileName;
@OneToOne(mappedBy = "docFile", cascade = CascadeType.ALL)
private FileContent fileContent;
}
我还按照here 中的建议尝试了@MapsId 和@PrimaryKeyJoinColumn,但仍然无法正常工作。
我做错了什么?
================================================ =====================
于 2019 年 8 月 8 日编辑
感谢 Razib 的回答,它运行良好。
但是,当我从数据库中选择 FILE 记录时,我发现它正在工作,但不是从新保存的 FILE 对象中选择。
File file = new File();
file.setFileName("sample.txt")
fileRepo.saveAndFlush(file);
File fileContent = new FileContent();
fileContent.set....;
fileContent.setFile(file);
fileContentRepo.saveAndFlush(fileContent);
return file;
我没有使用Cascade 来保存这些实体。当我使用file.getFileContent(); 访问返回file 时,它是null。
【问题讨论】:
标签: java jpa jpa-2.0 hibernate-mapping one-to-one