我正在开发一个项目,其中可以将持久数据标记为删除,但保留在数据库中,将列 (is_deleted) 设置为 TRUE。
使用休眠类映射属性“where”并将 where="is_deleted = 0" 添加到标签中可以正常工作。但是当我声明一组子类元素时它失败了。
这个简化的例子使用了包含类“Wheel”的成员集合的“Car”类,它继承自“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 已经有 where="is_deleted = 0",所以逻辑上这应该适用于所有定义的子类?
- 是否有其他方法可以向 NHibernate 中的所有持久数据添加 is_deleted 标志?
非常感激你的帮助