JPA /休眠重叠的PK和FK列

问题描述

我们使用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 (将#修改为@)