Как использовать карту, которая имеет ту же сущность, что и значение для нескольких ключей типа basi c - PullRequest
0 голосов
/ 10 июля 2020

Я читаю Pro JPA 2, и он дает следующий пример:

@Entity
public class Department {
    @Id private int id;

    @OneToMany(mappedBy="department")
    @MapKeyColumn(name="CUB_ID")
    private Map<String, Employee> employeesByCubicle;
    // ...
}

В книге упоминается, что CUB_ID будет столбцом в таблице сущностей Employee. Но как бы эта поддержка (или ее можно было бы изменить на поддержку) одного и того же сотрудника, работающего более чем в одном кабинете, например, карта, содержащая

{"cube A1": {"id":"1","name":"John Doe"},
 "cube A2": {"id":"1","name":"John Doe"}}

1 Ответ

1 голос
/ 11 июля 2020
  • Вы можете сделать это, обновив отношения на стороне отдела до @ManytoMany и @JoinTable (вы можете оставить @ManyToOne на стороне сотрудника или однонаправленно)
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable
    @MapKeyColumn(name="CUB_ID", nullable = true)
    private Map<String, Employee> employeesByCubicle;
  • Вывод: Как видите, он сохраняет ссылку на одного и того же сотрудника в обеих ячейках
        Employee employee = new Employee(1l, "Kav");
        Map<String, Employee> map = new HashMap<>();
        map.put("Cube1", employee);
        map.put("Cube2", employee);
        Department dep = new Department(1l, map);
        employee.setDepartment(dep);
        //Saved a department and an employee with 2 cubicles
        departmentRepository.save(dep);

        Department retrieved = departmentRepository.findById(employee.getId())
                                                    .get();
        System.out.println(retrieved);
        //Output
        //Department{id=1, employeesByCubicle={Cube1=Employee{id=1, name='Kav'},
        //                                     Cube2=Employee{id=1, name='Kav'}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...