Можете ли вы описать плюсы и минусы включения OID (обычно это идентификатор строки базы данных) в POJO , представляющего сущность в вашей модели?
На самом деле я не говорю о проблемах, связанных с equals / hashcode и т. Д., Я должен был бы лучше описать мою проблему (мою плохую :)) ...
У нас есть некоторые из тех классов сущностей, которые представляют бизнес-объекты (например, Product, Catalog и т. Д.). Иногда у них есть «бизнес-идентификатор», например, Product можно найти по его уникальному ProductId (который имеет 3 поля: id, type, repository).
В нашей базе данных таблица Product содержит столбец суррогатного первичного ключа (OID) в дополнение к 3 бизнес-столбцам (id, type, repository), чтобы упростить ссылки на внешние ключи и иметь меньше предложений joins.
Классы Product / ProductId являются частью API, который мы предоставляем другим приложениям. Так, например, они могут позвонить:
productManager.findProductById(ProductId productId);
Вопрос в том, должен ли OID быть включен в Product или в класс ProductId, зная, что от наших клиентов ожидается использование идентификатора ProductId.
Плюсы:
Я могу использовать OID для другого поиска, например
Product p = productManager.findProductById(ProductId productId);
Catalog c = productManager.findAllCatalogsContainingProduct(p.getOid());
Мы привыкли много искать в приложении по ProductId, поэтому каждый раз при обращении к базе данных он экономит, чтобы не найти OID, соответствующий ProductId.
Минусы:
- Я только что показал OID клиенту (будем надеяться, что он не использует его вместо бизнес-ключа !!)
Можете ли вы перечислить другие плюсы и минусы?