2012-04-23 64 views
1

在这方面的一些问题: -在休眠中映射Oracle 11g虚拟列

a。是否有一个特定的休眠模式type用于oracle 11g虚拟列或本地用户可以执行的操作?

b。如果要使用类型(例如,string,long)(并且在hql查询中使用它们时工作正常),那么如何使用Criteria API获取映射到虚拟列上的属性?

c。目前,标准查询返回这样的属性为空,尽管它们确实具有值。作为替代,我通过调用用于派生虚拟列的函数并使用实际值返回结果集来使用formula元素。但是,由于处理开销再次转移到休眠/应用程序代码,因此在表中创建虚拟列是没有用的。

有什么建议吗?

+0

当调用sproc的处理是在oracle不是客户端完成的。它基本上与提取虚拟列不一样? – Firo 2012-05-03 08:23:03

+0

是的,这是我想。但即使在oracle中,开销也是为了显式调用pl/sql函数。虚拟列通过消除这种开销而带来好处。还有一件事,标准查询使用了连接。也许在某个地方,虚拟列被取为空。有没有办法在标准查询中控制连接的行为? – 2012-05-04 10:56:14

+0

尝试捕获由nhibernate(内部记录器/ log4net)生成的SQL并直接运行它,如果它返回正确的结果那么问题是在NH映射端否则它是数据库返回空值 – Firo 2012-05-04 11:43:38

回答

1

这似乎是一个虚拟列的问题,没有什么Hibernate可以做的,因为它只是生成sql。

最简单的方法是使用公式属性而不是虚拟列。如果虚拟列是预先计算的,那么你可以使用普通的列和触发器来模拟它们。