Есть например два класса Document и User. У Document есть поле creator (из числа существующих пользователей). Как стоит задать такое поле? по id класса User или напрямую подставлять User?
private Integer userId;
OR
private User user;
В идеале услышать минусы/плюсы вариантов кратко. Спасибо
Не могу найти у себя в голове ни одного аргумента в пользу варианта:
private Integer userId;
Причем неважно: one-to-many, many-to-one и т.д.
Во всех известных мне реализациях DAO/ORM используется всегда связь типа:
private User user;
Ну разве что в терминах ORM это может быть раскрыто приблизительно так (пример по OrmLite):
@DatabaseField(columnName = userId, index=true, foreign = true)
private User user;
Откуда примерно понятно, что в реале связь естественно через userId, но конечный DAO объект уже будет private User user
Вариант private User user, как по мне, более правильный с точки зрения проектирования БД. Задаете связь oneToMany, oneToOne и в таблице БД Document получите айди user. Document со всеми user можно получить одним запросом выборки с документов. Так же само можно получить все документы по нужному пользователю.
Далее еще важен вопрос сколько может быть user на document. Если один, то вариант с айдишкой, в принципе, тоже можно использовать, хотя и не совсем правильно.
Если же user на document будет больше одного, тогда однозначно лучше использовать указанные выше связи, либо вариант manyToMany
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники