Список денормализации с морфией - PullRequest
0 голосов
/ 27 апреля 2018

Предположим, у меня есть две сущности морфия: 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
}

Я хочу отобразить эту модель в базу данных Mongodb следующим образом

Коллекция пользователей

{
    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
}

Итак, я хочу денормолизировать только определенные поля (например, только name) из документа Team в поле User teams. Я не понимаю Могу ли я использовать морфию (или какой-либо другой odm) для этого случая? Какие аннотации я должен использовать в своих организациях? Кажется, что аннотация @Reference недопустима для List<> полей.

Думаю, мне следует создать внутренний класс PersonTeam, который будет содержать имя и идентификатор команды, и использовать его в 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;
}

Это хороший способ решить мою проблему? спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Это единственный способ сделать это, по крайней мере, с морфией. Вы можете использовать @Reference в этих полях и хранить только идентификаторы. Это поможет, если ваша задача - сэкономить место.

...