У меня есть следующие доменные объекты:
public class Department {
private long departmentId;
}
public class Manager {
private long managerId;
}
public class Project {
private ProjectId compositeId;
@ManyToOne
private Department department;
@ManyToOne
private Manager manager;
}
public class ProjectId {
private long departmentId;
private long managerId;
}
Проект идентифицируется составным ключом (DepartmentId, managerId). Вопрос в том, как реализовать Project.setManager (..) или Project.setDepartment (..)? Является ли реализация, перечисленная ниже, лучшей практикой?
public void setManager( Manager manager ) {
this.manager = manager;
this.compositeId.setManagerId( manager.getId() );
}
Насколько я понимаю, составной идентификатор должен обновляться всякий раз, когда устанавливается свойство.
Более сложный и связанный с этим вопрос: как реализовать Project.setCompositeId (..)? Project не сможет обновить менеджера свойств или отдел на основе составного идентификатора (long). Перезапись композитного идентификатора без обновления свойств приведет к тому, что Project окажется в несоответствующем состоянии.