我正在考虑在一个项目中使用NHibernate,该项目具有一定程度的计划非规范化的数据库(由DBA计划)。从一组表中读取并将一列映射到一个属性不是问题。但是,在更新时,我必须将一个属性映射回原始表中的原始列,并在非规范化表中更新该列的几个副本。是否可以在不使用存储过程的情况下使用NHibernate执行此操作?
编辑:虽然我倾向于同意NXC的回答,但这个问题是关于如何用NHibernate解决问题,而不是在数据库中解决问题。答案 0 :(得分:1)
是的,您可以注册从DefaultSaveOrUpdateEventListener继承的事件侦听器,覆盖OnSaveOrUpdate并更新其他实体。
以下是一些关于事件监听器的博客文章:
答案 1 :(得分:1)
关于非规范化数据的一些想法:
谨慎使用;已知过度使用非规范化数据是导致维护和数据质量问题的根源。我参与的一个J2EE项目在560个表中只有4个非规范化数据项 - 其中两个是搜索表。
依靠应用程序来保持非规范化数据同步是一种已知的反模式。在事务系统中维护非规范化数据的普遍接受的方法是使用数据库触发器。使用触发器意味着数据库本身将传播来自任何源(不仅仅是您的应用程序)的更新。除非特定的数据阻止它,否则最好使用触发器来维护非规范化数据。
非规范化数据为维护开发人员留下了大象陷阱(特别是如果您不使用数据库触发器来维护数据)。确保记录每一个非规范化数据。