Это очень простой вопрос, который применяется к программированию веб-интерфейсов с помощью java. Скажем, я не использую ORM (даже если я его использую), и, допустим, у меня есть этот автомобиль (id, name, color, type, blah, blah) в моем приложении, и у меня есть таблица CAR представляют эту сущность в базе данных. Так, скажем, у меня есть эта необходимость обновить только подмножество полей на кучу машин, я понимаю, что типичный поток будет:Должен ли я всегда получать полный объект из базы данных?
- DAO класса (CarDAO) - getCarsForUpdate()
- перебрать все объекты автомобилей, обновите только цвет, чтобы сказать «зеленый» или что-то еще.
- Еще один вызов DAO для обновления автомобилей (автомобили легковые).
Теперь, разве это не так много бьется вокруг куста, что будет простым вопросом выбора и обновления? На первом шаге выше я получаю все данные объекта из базы данных: «выберите id, name, color, type, blah, blah .. где .. от CAR« вместо «выберите id, цвет от CAR, где ... ". Так почему я должен получать эти дополнительные поля, когда вы отправляете вызов DAO, я бы никогда не использовал ничего, кроме «цвета»? То же самое относится к последнему шагу 3. ИЛИ, скажем, я запрашиваю только для идентификатора и цвета (выберите id, color) и создайте объект автомобиля только с заполненным идентификатором и цветом - это нормально, не так ли? В любом случае объект «Автомобиль» анемичен?
Не все ли это (объектно-ориентированная) кажется немного поддельным?
Обновление всей таблицы не имеет смысла, когда я хочу обновить только кучу автомобилей на основе некоторых критериев (где условие), не так ли? – Jay
Вопрос в том, почему мы любим вести себя так, как будто мы читаем из РСУБД в объект, когда эти две вещи являются совершенно разными пространствами? Таблицы - это не объекты, объекты не являются таблицами. – Jay
@Jay, все же, можете ли вы написать SQL-запрос, который обрабатывает ваше состояние? Если да, то пусть RDBMS выполнит запрос, а не вытащит его на Java и обновит сам. –