如何解决用于多对多映射的 Spring 数据 r2dbc
我使用的是 Spring 数据 r2dbc,它不支持多对多映射。
表格:-
user
user_role
user_role_mapping
像往常一样,一个用户可以有多个映射。
Sql 查询,
select * from user u,user_role_mapping urm,user_role ur where u.user_id = :userId 和 u.org_id = :orgId 和 u.user_id = urm.user_id 和 ur.role_id = urm.role_id
这里,我有一个模型对象,其中包含所有 3 个类的所有属性。在这里,由于用户有多个角色,我得到了多条记录,然后使用用户详细信息和角色列表构建单个记录。
模特儿,
class User {
private long userId;
private String userName;
private List<String> roles;
}
Spring r2dbc 是否有任何开箱即用的支持,它返回一个包含用户详细信息和 List<String>
角色的用户对象。
解决方法
Spring 数据 r2dbc 不支持像完整 ORM 那样的自动连接。
有 this extension 支持它,可能可以满足您对开箱即用支持的需求。它与 spring-data-r2dbc 集成,并添加了一些 ORM 功能,例如关系。
您的模型将是这样的:
@Table
class User {
@Id @GeneratedValue
private Long userId;
@Column
private String userName;
@JoinTable
private Set<UserRole> roles;
}
@Table
class UserRole {
@Id @GeneratedValue
private Long roleId;
@Column
private String roleName;
@JoinTable
private Set<User> users;
}
以及您的存储库以加载具有链接角色的用户:
interface UserRepository extends LcR2dbcRepository<User,Long> {
default Mono<User> findUserByIdWithRoles(long userId) {
return SelectQuery.from(User.class,"user")
.join("user","roles","role")
.where(Criteria.property("user","userId",userId))
.execute(getLcClient())
.single();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。