У меня есть следующие объекты домена:
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 в несовместимом состоянии.