【发布时间】:2018-04-19 12:33:13
【问题描述】:
我有两个具有一对一关系的类/表(元文件和行计数)。行数仅适用于某些元文件。目前我有这个设置(简化):
元文件.java
@Entity
@Table(name = "file")
public class MetaFile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "file_id")
private int fileId;
// getters, setters, constructors...
}
RowCount.java
@Entity
@Table(name = "row_count")
public class RowCount implements Serializable {
@OneToOne
@JoinColumn(name="file_id")
private MetaFile file;
@Id
@Column(name="file_id")
private int file_id; // duplicate field needed so that crudrepo would recognise the id
private int rows;
public RowCount(MetaFile file, int rows) {
this.file = file;
this.rows = rows;
this.file_id = file.getFileId();
}
// getters, setters...
}
我使用 crudrepositories 来简化持久性。
我首先保存元文件以获取分配的 ID,然后使用具有新 ID 的元文件创建行计数对象并保存(如下所示)。然而,第二次保存失败,因为元文件没有立即保存到数据库中,并且外键约束失败。
metaFile = fileRepository.save(metaFile);
rowCountRepository.save(new RowCount(metaFile,getNumberOfRows(file));
metaFile 肯定会获得分配给它的有效 id。有没有办法确保这两个持续发生?
谢谢!
【问题讨论】:
-
你用'PRIMARYJOINCOLUMN'或者@mapsId注解测试了吗?
-
@HadiJ 将主键连接列添加到 MetaFile 中的新 RowCount 字段,并将带有 JoinColumn 的 MapsId 添加到 RowCount。但是,在保存时,我现在得到一个空标识符。
标签: java hibernate spring-boot spring-data-jpa one-to-one