Варианты связи между классами

106
06 ноября 2021, 00:00

Есть например два класса Document и User. У Document есть поле creator (из числа существующих пользователей). Как стоит задать такое поле? по id класса User или напрямую подставлять User?

private Integer userId;
OR
private User user;

В идеале услышать минусы/плюсы вариантов кратко. Спасибо

Answer 1

Не могу найти у себя в голове ни одного аргумента в пользу варианта:

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

Answer 2

Вариант private User user, как по мне, более правильный с точки зрения проектирования БД. Задаете связь oneToMany, oneToOne и в таблице БД Document получите айди user. Document со всеми user можно получить одним запросом выборки с документов. Так же само можно получить все документы по нужному пользователю.

Далее еще важен вопрос сколько может быть user на document. Если один, то вариант с айдишкой, в принципе, тоже можно использовать, хотя и не совсем правильно.

Если же user на document будет больше одного, тогда однозначно лучше использовать указанные выше связи, либо вариант manyToMany

READ ALSO
Управление частотой вызова метода

Управление частотой вызова метода

Пишу сервис для обращения к vk apiУ них стоит ограничение на запросы - не более 3 раз в секунду на методы c user token и 20 раз в секунду на методы с group token

191
Ошибка «The mysql extension is deprecated and will be removed in the future»

Ошибка «The mysql extension is deprecated and will be removed in the future»

При использовании MySQL получаю такую ошибку:

198
Соединить 2 запроса в 1

Соединить 2 запроса в 1

Пытаюсь получить товары у которых нету фото в базе и есть фото у аналогичных товаровВ первом запросе получаем model по которому идет проверка...

194