我需要的是从数据库视图(不可插入)填充实体并将所有实体更新到可更新的数据库表。
- 将实体映射到表并从视图编写自定义加载 SQL 不是一个选项,因为在某些情况下 NHibernate 仍然尝试从表名中选择(例如,当加入此实体时)。
- 映射实体以查看和编写自定义数据修改查询不是一个选项,因为我无法编写跨数据库 sql-insert 语句(因为最后插入的标识值选择部分)。
我现在想出的唯一想法是即时修改生成的 SQL 语句。我设法使用自定义拦截器来做到这一点,但我认为这不是一个好主意(因为我拦截了每一个查询,即使对于其他实体也是如此)。但是,我认为应该可以使用 custom 只更改需要的查询IEntityPersister
。我创建了一个基于SingleTableEntityPersister
,在 中指定它<class persister="…">
,但 NHibernate 甚至不想实例化它。
有没有为 NHibernate 编写自定义实体持久化器的示例?