在我的应用程序中,用户无法真正删除记录。相反,记录的 Deleted 字段被设置为 1,这将它隐藏起来以防止选择。
我需要保持这种行为,我正在研究 NHibernate 是否适合我的应用程序。我可以覆盖 NHibnernate 的删除行为,而不是发出 DELETE 语句,而是发出 UPDATES,如上所述?
显然,我还需要覆盖其 SELECT 行为以包含“AND Deleted = 0
” '条款。或者从 View 中读取。我不知道。
最佳答案
要实现软删除,只需绕过 Hibernate 删除机制。相反,映射表的 Deleted
.Net bool 属性的同名字段。要删除一个项目,设置 item.Deleted = true
.然后添加一个 where
属性到您的类映射以过滤掉已删除的项目。如果您愿意,可以为已删除的项目创建另一个映射。否则它们将对您的应用程序不可见,但也许这就是您想要的。
编辑:这也许是一个更好的方法:使用 <sql-delete>
标记为您的映射编写自定义删除操作。见 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#querysql-cud .我认为这与 where
结合使用属性将只是票。例如:
<class name="MyClass" table="my_table" where="deleted=0">
...
<sql-delete>UPDATE my_table SET deleted=1 WHERE id=?</sql-delete>
</class>
关于sql - 覆盖 NHibernate 中的删除行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593683/