我正在尝试使用MongoDB实现Spring Boot(逐个角色)身份验证。
我有done所以在SQL(例如MySQL)中使用(用户角色)多对多关系like this way带注释。
那么NoSQL数据库如何维持这种关系呢?我找到了this article。根据文章,某些数据库如Oracle和PostgreSQL都支持数组数据类型。因此,用户的角色应该与用户对象作为Role数组附加/绑定。我还遇到了另一个fantastic article来实现我的想法。
让我们看看我做过的代码......
角色(Java代码+ Mongo数据):
@Document(collection = "roles")
public class Role {
@Id private String id;
private String name;
// getters & setters
}
------------------------------------------------------------------------------------------
{"_id" : ObjectId("58b44a2b2f21472b5457f601"), "name" : "ROLE_ADMIN"}
{"_id" : ObjectId("58b44a3c2f21472b5457f602"), "name" : "ROLE_USER"}
用户(Java代码+ Mongo数据):在这里,我使用引用而不是 Role 的值(即 ROLE_ADMIN , ROLE_USER )因为将来的价值可能会改变......
@Document(collection = "users")
public class User {
@Id private String id;
private String userName;
private String password;
private boolean enabled;
private Set<Role> roles;
// getters & setters
}
------------------------------------------------------------------------------------------
{"_id" : ObjectId("58b2fdaf2f214709447f635d"), "userName" : "johir1", "password" : "$2a$04$S8edObuDygOMm0ccPfu2T.CsDgqDygTXW2A8adAsTRmtdmJehURQu", "enabled" : true, "roles" : ["58b44a2b2f21472b5457f601"]}
{"_id" : ObjectId("58b4c21e00ecf75512594fa1"), "userName" : "johir2", "password" : "$2a$04$mgHMTC2FrDUgpU3sNi3d6uRKl0zgRO6bO55aD5R8dCTVZYPtJTPtW", "enabled" : true, "roles" : ["58b44a2b2f21472b5457f601", "58b44a2b2f21472b5457f602"]}
问题:
我想在用户&amp; 角色,如下面的代码段
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
private Set<User> users;
---------------------------------------------------------------
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
NoSQL数据库有表时如何做到这一点?具体来说,NoSQL如何建立对象之间的关系?