是否可以在不使用 JPA 或嵌套 类 的情况下在 Spring Boot 中实现一个 POJO,它有一个表示复合主键的字段?

Is it possible to implement a POJO in Spring Boot that has a field representing a composite primary key while not utilizing JPA or nested classes?

我目前正在尝试在 Spring Boot 中为已经进入开发阶段的应用程序实施 R2DBC - 这意味着,不幸的是,我们的 DDL 不灵活,因为其他微服务依赖于它,反之亦然。 R2DBC 的一个重要限制是不支持嵌套的 classes。而且,它不支持JPA,因为那样会破坏全方位非阻塞的目的。因此,所有这些有用的注释也不在 table 范围内。

我正在处理的 class 看起来像这样:

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString

public class Stats {
   @Id
   StatsPK statsPK

   @Column(stat_name)
   String stat;

   ...

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Embeddable
    public static class StatsPK implements Serializable {
        @Column("store_id")
        private Integer storeId;

        @Column("empl_id")
        private String emplId;

        @Column("app_version")
        private String appVersion;
    }
}

在研究了我的问题之后,我发现了很多方法来计算复合键,包括上面示例中已经显示的内容(使用@Embeddable 注释),使用自定义 PK 对象(这是类似,但可以选择使用为此目的设计的 class,例如 CompositeKeyHolder)、JPA @TableId(TableId.class) 注释,以及其他一些看起来不太有前途的注释。

所有这些选项似乎都在利用 JPA 或利用嵌套对象,但我无法做到这一点。我真的想不出一种方法来绕过这些限制。但是由于我是初学者,所以我决定问问以前是否有人处理过这个问题。 感谢任何反馈。

Spring 数据 R2DBCs 存储库抽象尚不支持组合键。 您可以使用 DatabaseClient though to construct your SQL and to query data.