Spring Data R2dbc 中处理表间关系的最佳实践
Best practice of handling relations between tables in Spring Data R2dbc
我试图在RDBMS中创建一个user/roles关系,想用R2dbc(Spring Data R2dbc)与后端数据库握手。
假设有三个表,用户,角色,和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;
}
与JPA不同,R2dbc重用了spring-data-relational-common(也用于Spring数据Jdbc)来注释表,但是没有工具解决关系,比如这里的roles
.
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 数据 R2DBC 最终可能会移动到同一模型。
我试图在RDBMS中创建一个user/roles关系,想用R2dbc(Spring Data R2dbc)与后端数据库握手。
假设有三个表,用户,角色,和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;
}
与JPA不同,R2dbc重用了spring-data-relational-common(也用于Spring数据Jdbc)来注释表,但是没有工具解决关系,比如这里的roles
.
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 数据 R2DBC 最终可能会移动到同一模型。