Один-ко-многим с тем же лицом
Я делаю реверс-инжиниринг из схемы базы данных (используя Hibernate), и я хочу иметь следующее в результирующей сущности:
public class Task implements Serializable {
...
List<Task> dependentTasks = new ArrayList<Task>(0);
...
}
Если я сделаю это как отношение 1:N, он сгенерирует это:
public class Task implements Serializable {
...
Task task;
List<Task> dependentTasks = new ArrayList<Task>(0);
...
}
Если я сделаю это как отношение M:N, он сгенерирует два одинаковых списка:
public class Task implements Serializable {
...
List<Task> dependentTasks_1 = new ArrayList<Task>(0);
List<Task> dependentTasks_2 = new ArrayList<Task>(0);
...
}
1 ответ
РЕДАКТИРОВАТЬ - ваш инструмент обратного инжиниринга создает задачу задачи; сделать отношения двунаправленными. Вы можете удалить свойство из объекта и полученных файлов конфигурации, но отношения будут однонаправленными - вы больше не сможете переходить от детей к родителям.
Могу поспорить, что в базовой таблице есть столбец для родителя задачи, который называется что-то вроде task_id. Если вы удалите ссылку на родителя, этот столбец больше не будет использоваться моделью вашего домена.
Это опасность использования инструментов для выполнения работы за вас. Вы должны изучить документацию и понять разницу между однонаправленными и двунаправленными отношениями в спящем режиме. Просто любопытно, почему ваш класс домена не должен иметь свойство 'task'?
РЕДАКТИРОВАТЬ - в отношении вас комментарий об изменении ограничения на таблицу, будьте осторожны. Унаследованная модель данных, которую вы имеете, подразумевает, что задачи должны иметь ссылки на их родителей. Таким образом, изменяя это, вы меняете семантику отношений, которые содержит ваша унаследованная модель. Вы можете сломать вещи.
Я думаю, что лучше оставить БД там, где она есть, и привести модель, которую вы строите, в соответствие с семантикой базовых отношений. Другими словами, говорить, что свойство "мы не хотим задачи" не имеет смысла - ваша структура таблицы подразумевает, что вы этого хотите, и она могла быть спроектирована таким образом по определенной причине.