четверг, 30 июля 2009 г.

Ужасный маппинг (Crazy Mapping)

Вчера отрефакторил одну "мега-фичу". Она заключалась в том, что маппинг для сущностей создавался автоматически и подключался при каждом старте системы. Это было очень плохо по следующим причинам:
  1. Нет зафиксированного состояния БД. Непонятно, какие сейчас названия у колонок, внешних ключей, индексов и даже таблиц. Для нас это очень важно т.к. мы мигрируем БД из одного состояния в другое и нам обязательно нужно знать, как сейчас называются объекты в БД.
  2. Смена логики формирования влечет смену всех имен объектов в БД.
  3. У нас так не принято делать. Можете не считать это аргументом, но для меня это аргумент.
Я уже обрадовался, что больше такой "фичи" у нас нет, но не тут-то было. Начала вылезать ошибка, что сущности "ru.naumen.unids.archive.StudentArchive" нет в hibernate. Оказалось, что автор данной "фичи" маппил два класса в одну таблицу, а я вынес только один маппинг. То есть у него это выглядело вот так:
1) <class name="ru.naumen.unids.archive.StudentArchive" table="AR_STUDENT" lazy="false">
2) <class name="ru.naumen.unistudent.bobjects.student.StudentArchive" table="AR_STUDENT" lazy="false">
В остальном же весь маппинг полностью аналогичен. Вот так... Сейчас разгребаем.

2 комментария:

  1. прошу писать мне подобных случаях, чтобы я раздавал пинки виновным.

    ОтветитьУдалить
  2. К большому сожалению, автор данной фичи давно уже уволился, а его домашний адрес не сохранился

    ОтветитьУдалить