NoSQL(Mongo)如何在对象之间建立关系?

时间:2017-02-28 15:38:27

标签: java spring mongodb

我正在尝试使用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如何建立对象之间的关系?

0 个答案:

没有答案