sql - 覆盖 NHibernate 中的删除行为

标签 sql nhibernate overriding

在我的应用程序中,用户无法真正删除记录。相反,记录的 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/

相关文章:

c# - 使用 SqlBuilder 的 FROM 子句中的 SQL 注入(inject)

mysql - 仅一条 SQL 中的两步 SQL 语句

mysql selfjoin 最小差异

c# - 以编程方式重新创建现有的sql server数据库?

matlab - 对象数组的 'subsref' 行为

java - 获取字符串路径的公共(public)根和该路径的文件夹列表

.net - Nhibernate 过滤器不能一致地应用于子集合

c# - 如何为多对多映射配置 nHibernate?

JavaDoc 覆盖

Python:子类之间的引用