Spring和mongoDB嵌套文档

时间:2014-08-21 14:59:27

标签: spring-data-mongodb

我有两个对象: 用户和权限对象, 每个用户都有权限和权限列表也有权限列表, 意味着它的递归。 在我的mongoDB中,我只有Users集合。 我有两个权限级别的用户对象,当我试图从mongoDB获取User对象时,我只得到第一级,并且subpermission列表返回为null。

我错过了一些符号吗? THX!

**结果:来自mongo

  

{ “的sessionId”: “管理员”, “状态”: “OK”, “username” 的: “管理员”, “权限”:[{ “名称”: “MPC”, “链接”:“#/释放“,”subPermissions“:null},{”name“:”MPC PE“,”link“:”#“,”subPermissions“:null}]}

mongo中的用户对象

{
    "_id" : ObjectId("53f3731c1401dacba49cfb74"),
    "userName" : "admin",
    "email" : "ashoshani@ebay.com",
    "sessionId" : "admin",
    "permissions" : [
        {
            "name" : "MPC",
            "link" : "#/Release",
            "sub" : []
        },
        {
            "name" : "MPC PE",
            "link" : "#",
            "sub" : [
                {
                    "name" : "Validate @ Release",
                    "link" : "#/mpcToPeRelease",
                    "sub" : []
                },
                {
                    "name" : "View Report",
                    "link" : "#/mpcToPeReport",
                    "sub" : []
                }
            ]
        }
    ]
}

java中的用户类

@Document(collection="users")
public class User {

    private String id;

    private String userName;

    private String email;

    private String sessionId;

    private ArrayList<Permission> permissions;

    public String getUserName() {
        return userName;
    }

    public String getSessionId() {
        return sessionId;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public ArrayList<Permission> getPermissions() {
        return permissions;
    }

    public void setPermissions(ArrayList<Permission> permissions) {
        this.permissions = permissions;
    }
}

和Java中的权限类:

@Document
public class Permission {

    private String name;
    private String link;

    private ArrayList<Permission> subPermissions;

    public String getName() {
        return name;
    }

    public String getLink() {
        return link;
    }

    public ArrayList<Permission> getSubPermissions() {
        return subPermissions;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public void setSubPermissions(ArrayList<Permission> subPermissions) {
        this.subPermissions = subPermissions;
    }
}

1 个答案:

答案 0 :(得分:2)

不确定这是唯一的问题,但您应该使用subPermissions注释@Field("sub")字段,否则Spring将其映射到名为subPermissions的(不存在的)MongoDB字段。

另请注意,使用Permission注释Document类是多余的,因为它不是真正的第一级文档,而是子文档。无论如何,这不是一个错误。