Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoSQL(Mongo)如何建立对象之间的关系?_Java_Spring_Mongodb - Fatal编程技术网

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

Java NoSQL(Mongo)如何建立对象之间的关系?,java,spring,mongodb,Java,Spring,Mongodb,我正在尝试用MongoDB实现Spring引导(按角色的用户)身份验证 我在SQL(比如MySQL)中使用了(用户角色)与注释的多对多关系 那么NoSQL数据库如何维护这种关系呢?我发现。根据本文,一些数据库(如Oracle和PostgreSQL)支持数组数据类型。因此,用户的角色应该作为角色数组附加/绑定到用户对象。为了实现我的想法,我还遇到了另一个问题 让我们看看我所做的代码 角色(Java代码+Mongo数据): 用户(Java代码+Mongo数据):在这里,我使用引用而不是Role(即R

我正在尝试用MongoDB实现Spring引导(按角色的用户)身份验证

我在SQL(比如MySQL)中使用了(用户角色)与注释的多对多关系

那么NoSQL数据库如何维护这种关系呢?我发现。根据本文,一些数据库(如Oracle和PostgreSQL)支持数组数据类型。因此,用户的角色应该作为角色数组附加/绑定到用户对象。为了实现我的想法,我还遇到了另一个问题

让我们看看我所做的代码

角色(Java代码+Mongo数据):

用户(Java代码+Mongo数据):在这里,我使用引用而不是Role(即Role\u ADMIN,Role\u User)的值,因为将来值可能会更改

@文档(collection=“users”)
公共类用户{
@Id私有字符串Id;
私有字符串用户名;
私有字符串密码;
启用私有布尔值;
私人设定角色;
//接球手和接球手
}
------------------------------------------------------------------------------------------
{“_id”:ObjectId(“58B2FDAF2F2147709447F635D”),“用户名”:“johir1”,“密码”:“$2a$04$S8edObuDygOMm0ccPfu2T.CsDgqDygTXW2A8adAsTRmtdmJehURQu”,“enabled”:true,“角色”:[“58b44a2b2f21472b5457f601”]
{“_id”:ObjectId(“58b4c21e00ecf75512594fa1”),“用户名”:“johir2”,“密码”:“$2a$04$mghmtc2frdugpu3sni3d6urkl0zgro6bo55ad5r8dctvzyptjtpw”,“enabled”:true,“角色”:[“58b44a2b2f2147b2b5457f601”,“58b44a2b2f2147b545f602”]
问题:

我想在用户角色之间建立关系,如下代码片段所示

    @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;
@ManyToMany(fetch=FetchType.LAZY,mappedBy=“roles”)
私人用户;
---------------------------------------------------------------
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(joinColumns=@JoinColumn(name=“user\u id”)、inverseJoinColumns=@JoinColumn(name=“role\u id”))
私人设定角色;
当NoSQL数据库有表时,我该怎么做?具体来说,NoSQL如何建立对象之间的关系?

MongoDB不是一个关系数据库管理系统,因此在使用完全不同的范例时,保持RDBMS的思维方式不是一个很好的主意。本文可能会有所帮助:不要使用角色、用户和用户&角色,考虑使用一个单独的集合来进行身份验证,MangGDB不是关系数据库管理系统,所以当您使用完全不同的范式时,保持RDBMS的思维方式不是一个好主意。本文可能会有帮助:而不是具有角色、用户和用户和角色,考虑使用一个集合来进行身份验证
@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"]}
    @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;