微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPA /休眠重叠的PK和FK列

如何解决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 举报,一经查实,本站将立刻删除。