1

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

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

4

2 回答 2

1

是的,您可以注册一个从 DefaultSaveOrUpdateEventListener 继承的事件侦听器,覆盖 OnSaveOrUpdate 并更新其他实体。

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

于 2009-02-22T22:27:08.523 回答
1

关于非规范化数据的一些想法:

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

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

  • 非规范化数据给维护开发人员留下了陷阱(尤其是如果您不使用数据库触发器来维护数据)。确保记录每条非规范化数据。

于 2009-02-22T23:33:01.453 回答