问题描述
我们使用Postgres和JPA / Hibernate每两周一次导入大量数据(每次导入约50-100M行)。我们正在尝试对每个导入的表进行分区,这使我们遇到了一些Hibernate PK / FK列映射问题。设置基本上就是在sql端完成的
CREATE TABLE row (
import_timestamp timestamp,id uuid,PRIMARY KEY (import_timestamp,id)
) PARTITION BY LIST (import_timestamp);
CREATE TABLE row_detail (
import_timestamp timestamp,row_id uuid,PRIMARY KEY(import_timestamp,id),CONSTRAINT row_detail_row_fk FOREIGN KEY (row_id,import_timestamp) REFERENCES row (id,import_timestamp)
) PARTITION BY LIST (import_timestamp);
在Java方面:
@Entity(name = "row")
public class RowEntity {
@EmbeddedId
private PartitionedId id;
@OnetoMany(cascade = ALL,mappedBy = "row")
private List<RowDetailEntity> details;
}
@Entity(name = "row_detail")
public class RowDetailEntity {
@EmbeddedId
private PartitionedId id;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "row_id",referencedColumnName = "id"),@JoinColumn(name = "importTimestamp",referencedColumnName = "importTimestamp")
})
private RowEntity row;
}
@Embeddable
public class PartitionedId implements Serializable {
private Instant importTimestamp;
private UUID id;
}
休眠然后在启动时抱怨:
column: import_timestamp (should be mapped with insert="false" update="false")
我可以按照说的那样使错误保持沉默,但这没什么意义,因为我被迫分别为两个insertable=false
设置updatable=false
和@JoinColumn()
,这意味着{ {1}}不会在插入时填充。
我可以走row_id
路线,但前提是我给@MapsId
表一个包含所有3个属性(import_timestamp,id,row_id)的PK,而我并不是真的想要或不需要那。
问题是,我如何让Hibernate理解重叠但不完全嵌套的PK / FK?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)