Java 带morphia的列表非规范化

Java 带morphia的列表非规范化,java,mongodb,nosql,morphia,Java,Mongodb,Nosql,Morphia,假设我有两个morphia实体:Person和Team,它们看起来像这样 @Entity public class Person { private String name; private String login; private String mail; private List<Team> teams; } @Entity public class Team { private String name; private String d

假设我有两个morphia实体:
Person
Team
,它们看起来像这样

@Entity
public class Person {
   private String name;
   private String login;
   private String mail;
   private List<Team> teams;
}


@Entity
public class Team {
   private String name;
   private String description;
   private List<Person> members;
   //some more fields
}
团队集合

{
    name:"someName",
    login:"somelogin",
    mail:"some@mail.com",
    teams: [
        {id:"teamId", name:"TeamName"} //only specific fields fron Team Entity
        {id:"anotherTeamId", name:"AnotherTeamName"}        
    ]
}
{
    id:"teamId", 
    name:"TeamName",
    description:"Very strong team",
    members: [id:"aaa", name: "someName"] //only specific fields fron User Entity
    //some other fields
}

{
    id:"anotherTeamId", 
    name:"AnotherTeamName",
    description:"Brave new team",
    members: [id:"aaa", name: "someName"] //only specific fields fron User Entity
    //some other fields
}
因此,我只想将
团队
文档中的特定字段(例如,仅
名称
)反规范化为
用户
团队字段。 我不明白我可以用morphia(或其他odm)来处理这个案子吗?我应该在实体中使用哪些注释? 似乎在
列表
字段中不允许使用@Reference注释

我认为,我应该创建内部类
PersonTeam
,它将包含团队的名称和id,并在
Person
类中使用它

@Entity
public class Person {
   private String name;
   private String login;
   private String mail;
   private List<PersonTeam> teams;
}

public class PersonTeam {
    private String teamId;
    private String teamName;
}
@实体
公共阶层人士{
私有字符串名称;
私有字符串登录;
私人字符串邮件;
私人名单小组;
}
公共级人员团队{
私有字符串teamId;
私有字符串teamName;
}

这是解决我问题的好办法吗?谢谢大家!

至少对morphia来说,这是唯一的办法。您可以考虑在这些字段上使用<代码> @引用< /代码>,只存储ID。如果您关心的是节省空间,那么这会有所帮助。

谢谢您的回答!你认为,以我在nosql世界的问题中描述的方式去规范化数据可以吗?在我的例子中,这种方式有助于减少查询数量(读取查询,而不是写入查询),但需要更多的磁盘空间。这种方式还有其他缺点吗?最后我找到了关于这个主题的文章。它使许多事情变得清楚