【问题标题】:Mapping Oracle 11g virtual columns in Hibernate在 Hibernate 中映射 Oracle 11g 虚拟列
【发布时间】:2012-05-07 15:17:29
【问题描述】:

这方面的一些问题:-

一个。是否有特定的休眠 type 可用于 oracle 11g 虚拟列或本地的?

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

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

有什么建议吗?

【问题讨论】:

  • 当调用存储过程时,处理是在 oracle 而不是客户端中完成的。和获取虚拟列基本一样吗?
  • 是的,我认为是。但即使在 oracle 中,显式调用 pl/sql 函数的开销也是存在的。虚拟列通过摆脱这种开销来提供好处。还有一件事,条件查询使用连接。虚拟列可能在连接中的某个地方被提取为空。有没有办法控制条件查询中联接的行为?
  • 尝试捕获由nhibernate(内部记录器/log4net)生成的sql并直接运行它,如果它返回正确的结果则问题出在NH映射端,否则是数据库返回空值
  • 不适用于 .NET - 我使用 oracle 11g 数据库和 java。是的,我尝试使用条件查询生成的 sql。它为虚拟列返回空值。它与标准中的连接有关。即使没有传递给条件查询的参数,即在默认选择的情况下,结果也是相同的空值。但是一个简单的 hql 查询确实会返回值。

标签: oracle11g hibernate-mapping


【解决方案1】:

这似乎是虚拟列的问题,Hibernate 对此无能为力,因为它只是生成 sql。

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

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2011-07-21
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多