代码之家  ›  专栏  ›  技术社区  ›  Daniel Auger

是否可以在不使用存储过程的情况下使用nhibernate进行非规范化更新?

  •  1
  • Daniel Auger  · 技术社区  · 15 年前

    我正在考虑在一个项目中使用NHibernate,这个项目有一个数据库,有一定程度的计划非规范化(由DBA计划)。从一组表中读取并将一列映射到一个属性不是问题。但是,在更新时,我必须将一个属性映射回原始表中的原始列,并在非规范化表中更新该列的一些副本。是否可以在不使用存储过程的情况下使用NHibernate进行此操作?

    编辑:虽然我倾向于同意NXC的答案,但这个问题是关于如何用NHibernate解决问题,而不是在数据库中解决问题。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mauricio Scheffer    15 年前

    是的,可以注册继承自DefaultSaveOrUpdateEventListener的事件侦听器,重写OnSaveOrUpdate并更新其他实体。

    以下是一些关于事件侦听器的博客文章:

        2
  •  1
  •   ConcernedOfTunbridgeWells    15 年前

    关于非标准化数据的一些思考:

    • 谨慎使用;过度使用非规范化数据被认为是维护和数据质量问题的根源。我参与的一个J2EE项目在560个表中只有4个非规范化的数据项,其中两个是搜索表。

    • 依赖于应用程序保持非标准化数据同步是一种已知的反模式。在事务系统中维护非规范化数据的普遍接受的方法是使用数据库触发器。使用触发器意味着数据库本身将支持来自任何源(不仅仅是您的应用程序)的更新。您最好使用触发器来维护非规范化的数据,除非有特定的阻止。

    • 非规范化的数据给维护开发人员留下了巨大的陷阱(特别是如果您不使用DB触发器来维护数据)。确保记录每一个非规范化数据。