Spring Data R2dbc中处理表间关系的最佳实践

Han*_*tsy 6 postgresql spring-boot spring-data-jdbc spring-data-r2dbc r2dbc

我尝试在 RDBMS 中创建用户/角色关系,并希望使用 R2dbc(Spring Data R2dbc) 与后端数据库握手。

假设有三个表,users、roles 和user_roles。

@Table("users")
class User {
    @Id
    private String username;

    private String password;

    private String email;

    @Builder.Default
    private boolean active = true;

    @Builder.Default
    private List<String> roles = new ArrayList<>();

    @Column("created_at")
    private LocalDateTime createdDate;

}
Run Code Online (Sandbox Code Playgroud)

与 JPA 不同,R2dbc 重用 spring-data-relational-common(在 Spring Data Jdbc 中也使用)来注释表,但没有解决关系的工具,例如roles此处。

Jen*_*der 2

Spring Data R2DBC 目前不支持关系。

因此,您要做的就是拥有一个User2Role具有两个属性的单独实体:String username以及String rolename引用被引用实体的 id。

由于您还标记了 Spring Data JDBC 问题:Spring Data JDBC 确实支持 1:1 和 1:M 引用,但不支持 M:1 或 M:N 关系。有关这方面的一些背景信息,请参阅https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates 。

Spring Data R2DBC 最终可能会转向相同的模型。

  • 抱歉,我的语气很抱歉,但是 Spring 团队什么时候会朝着这个方向努力呢?这个答案已经有快三年了,从那以后没有任何改变。这是一个非常频繁的用例,并且没有官方指南如何处理它...... (3认同)