3

根据此博客条目,我正在尝试使“软删除”正常工作(这涉及启用OrmSettings.SaveMapping为每个实体输出 HBMXML 文件,然后手动向该文件添加过滤器)。

如果我按照这些说明操作,它就可以工作,但这基本上是将所有模型 CFC 复制到 HBMXML 文件中,这既污染了文件系统,又产生了维护开销。

有没有办法从 CFML 中创建过滤器(或修改 HBMXML 文件)——即生成 HBMXML 文件?

(注意:where在 cfproperty 上使用该属性适用于一对多关系,但不适用于多对多关系 - 对于那些它试图在连接表而不是其他实体上过滤的关系。)

4

2 回答 2

1

您是否可以考虑避免软删除并使用 Hibernates Envers 在单独的表中维护已删除实体的记录?这样就避免了确保每个查询和集合都记住考虑已删除条件的麻烦。

http://docs.jboss.org/envers/docs/

如果您只对审计删除感兴趣,那么只需注册所需的侦听器并确保您已将 org.hibernate.envers.store_data_at_delete 设置为 true。如果您仅出于审计目的而保留,这是一个很好的解决方案。

我也不认为提到的解决方案会级联删除。然而,Hibernate 允许您为任何操作修改 SQL:覆盖 SQL 删除操作(使用注释完成,例如实体上的 @SQLDelete(set deleted = 1 ....)。然后删除将级联。

http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch13.html#querysql-cud

于 2013-10-15T17:50:35.040 回答
0

我通常使用“基础”服务对象来处理我所有的 ORM 对象的 CRUD,并且对于每个 ORM 对象,我扩展了该基础。对于需要“软删除”的项目,我只需覆盖delete()服务的方法以设置属性(通常命名为“已删除”为 true),然后保存实体。

于 2013-10-16T03:57:41.943 回答