我正在使用 NHibernate 和代码映射,并且我有一个由这个公式创建的属性。
Property(x => x.IsInOverdue,
mapper => mapper
.Formula("(SELECT (state_ <> 3 AND invoice_uniqueAlias.duedate_ < NOW()) " +
" FROM _invoice AS invoice_uniqueAlias "+
" WHERE invoice_uniqueAlias.invoice_id = issuedinvoice_key)"));
它工作得很好,这个sql作为子选择插入到所有查询中......
但我需要在 invoice_uniqueAlias.duedate_ 值上增加 1 天。我们正在使用 PostgreSQL,它的语法是:invoice_uniqueAlias.duedate_ + interval '1 day'
但是当我把它放在 mapper.Formula 中时,NHibernate 认为区间是列的名称,并且在所有查询中都尝试在区间关键字之前添加表前缀。生成的 SQL 如下所示:
... (SELECT (issuedinvo0_.state_ <> 3
AND (invoice_uniqueAlias.duedate_ + (issuedinvo0_.interval '1 day')) < NOW()) ...
我试图将区间关键字放在 [, ` 中,将语句区间 + '1 天' 放在括号中,但它没有帮助。有什么建议如何在 NHibernate 中正确处理它,或者如何在不使用 + 间隔语法的情况下在 Postgres 中编写它?