Как правильно реализовать объект домена с составным идентификатором в Hibernate?

У меня есть следующие объекты домена:

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 в несовместимом состоянии.

1
задан Pascal Thivent 11 September 2010 в 09:11
поделиться