Java 用Spring Boot JPA映射星型模式
我正在努力确定正确的注释,以便使用SpringBootJPA映射星型模式Java 用Spring Boot JPA映射星型模式,java,spring-boot,spring-data-jpa,star-schema,Java,Spring Boot,Spring Data Jpa,Star Schema,我正在努力确定正确的注释,以便使用SpringBootJPA映射星型模式 让我们考虑3个表: (1)DIM_One(1)DIM_One(1)DIM_One(1..n)事实(1..n)DIM_One(1)DIM_Two DIM_1和DIM_2都有一个id作为主键。 事实的主键是(DIM_One_pk,DIM_Two_pk)的组合 目前,我的DIM表中的注释类似于: @Table(name="DIM_One") @Entity @Getter @ToString public c
让我们考虑3个表:
(1)DIM_One(1)DIM_One(1)DIM_One(1..n)事实(1..n)DIM_One(1)DIM_Two DIM_1和DIM_2都有一个id作为主键。 事实的主键是(DIM_One_pk,DIM_Two_pk)的组合 目前,我的DIM表中的注释类似于:@Table(name="DIM_One")
@Entity
@Getter
@ToString
public class One {
@Id
@Column(name = "dim_one_id")
private UUID id;
//...
}
关于事实表,我有:
@Entity
@Table(name = "FACT")
@ToString
@Getter
public class Fact {
@EmbeddedId
private FactId id;
//...
}
使用相应的FactId类:
@Embeddable
@Getter
@EqualsAndHashCode
public class FactId implements Serializable {
private One one;
private Two two;
}
我觉得有点迷失了正确的注释,我需要使用这些注释使其符合基数:
(1)DIM_One(1)DIM_One(1)DIM_One(1..n)事实(1..n)DIM_One(1)DIM_Two
此外,它实际上应该映射为OneToMany还是OneToOne?您的图表显示了(1..n)-(1)关系,因此它应该像这样映射
除此之外,您还需要考虑如何使用:
- 如果加载事实,是否加载关联的维度条目?这将导致在急切加载和延迟加载之间做出决定
- 您希望能够从事实导航到维度,还是相反?或者两者都有?这导致了关于方向性的决定
- 如果您坚持,请删除。。。维度是否应加入到该操作中?=>级联配置
在读取端,您将不断使用聚合函数进行操作,可能还会使用非平凡表达式对函数进行窗口化。JPQL,JPA的查询语言也不是为此而构建的,这将严重限制您的选择。感谢您富有洞察力的回答。你知道有哪个框架更适合这样的任务吗?我不知道任何具体的框架,但你要寻找的术语是ETL(提取-转换-加载),它是从各种源提取数据、将数据转换(转换为星型模式)并将其加载到各种数据库中的工具。