Я работаю над проектом, в котором сохраненные данные могут быть помечены для удаления, но остаются в базе данных, для столбца (is_deleted) которого установлено значение TRUE.
Это прекрасно работает, используя свойство отображения класса hibernate "where" и добавляя where = "is_deleted = 0" к тегам. Но это не помогает, когда я объявляю набор элементов подкласса.
В этом упрощенном примере используется класс "Car", содержащий коллекцию членов класса "Wheel", которая наследуется от класса "CarPart":
<class name="Car" where="is_deleted = 0">
<id name="Identifier" column="car_id">
<generator class="native" />
</id>
<set name="Wheels" lazy="true" where="is_deleted = 0">
<key column="car_id" />
<one-to-many class="Wheel" />
</set>
</class>
<class name="CarPart" where="is_deleted = 0">
<id name="Identifier" column="part_id">
<generator class="native" />
</id>
<property name="IsDeleted" />
<joined-subclass name="Wheel" >
<key column="part_id" />
<property name="radius" />
</joined-subclass>
</class>
Если я в коде пытаюсь получить доступ к коллекции Car.Wheels Я получаю ошибку SQL, потому что предложение "where" применяется к таблице подкласса "Wheel" вместо своего суперкласса "CarPart", где свойство IsDeleted фактически определено.
Сгенерированный SQL выглядит примерно так:
select * from Wheel w inner join CarPart cp on...
where w.is_deleted = 0
вместо правильного
select * from Wheel w inner join CarPart cp on...
where cp.is_deleted = 0
- Это ошибка? Или я скучаю по
подробно? Суперкласс CarPart
уже имеет где = "is_deleted = 0",
так логично это должно относиться ко всем
определенные подклассы?
- Существуют ли другие способы добавления
Флаг is_deleted для всех сохраненных данных
в NHibernate?
Ваша помощь очень ценится