Java 带morphia的列表非规范化
假设我有两个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
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世界的问题中描述的方式去规范化数据可以吗?在我的例子中,这种方式有助于减少查询数量(读取查询,而不是写入查询),但需要更多的磁盘空间。这种方式还有其他缺点吗?最后我找到了关于这个主题的文章。它使许多事情变得清楚