【问题标题】:Mapping Calculated Fields in Hibernate在 Hibernate 中映射计算字段
【发布时间】:2009-10-20 13:41:24
【问题描述】:

我不确定这在 Hibernate 中是否可行,但如果可以,那就太好了 :) 我实际上并没有通过这个概念阶段,但我会尽我所能解释。

我想利用 Oracle Spatial 功能进行基于邻近的搜索。想象一下,我有一个存储纬度/经度值的 Location 实体。然后想象我想查询用户指定的纬度/经度位置 5 公里内的所有位置。在结果中,我想查看所有匹配的 Locations,但除了 Location 实体上的标准映射字段之外,我还想显示每个 Location 相对于用户指定位置的距离。

Oracle Spatial 允许我将其作为 SQL 中的计算字段执行,但我不明白 Hibernate 如何支持从数据库返回的计算字段。由于计算字段不是表中的一列,我无法进行标准映射。

是否有一些特殊功能允许我为 POJO 创建包装器并将 Hibernate 映射到它们以便可以返回额外的计算属性?

【问题讨论】:

    标签: java oracle hibernate orm spatial


    【解决方案1】:

    我发现,使用 JPA 注释,我可以简单地在映射对象上创建一个与计算的 sql 字段同名的属性(例如“距离”)并将其注释为:

    @Column(insertable=false, updatable=false)
    private Double distance;
    

    当您尝试从数据库中保存回来时,这应该映射属性并且不会引发错误。

    请注意,正确的注释是可更新的(不能像最初发布的那样更新)

    【讨论】:

      【解决方案2】:

      你看过Hibernate Spatial和它的Oracle10g/11g Provider吗?

      Hibernate Spatial 是一个泛型 扩展至 Hibernate 以进行处理 地理数据。休眠空间是 开源和许可,如 Hibernate,在 LGPL 许可下。

      Hibernate Spatial 允许您处理 以标准化的地理数据 方法。它从 您的数据库支持的特定方式 地理数据,并提供 标准化的跨数据库接口 地理数据存储和查询 功能。

      Hibernate Spatial 支持大多数 OGC 简单功能的功能 规格。支持的数据库 分别是:Oracle 10g/11g, Postgresql/Postgis 和 MySQL。

      【讨论】:

      • 这看起来很有趣,感谢您向我指出这个方向。但是,仍然不清楚我实际上是如何映射计算字段的。想象一下,我的 Location 类定义了一个“Point”。我想返回用户指定点 5 公里范围内的位置列表。我希望每个匹配的位置都包含与用户指定点的精确接近度(这必须在数据库中作为几何处理的一部分进行计算)。我的基本位置 POJO 显然没有这个计算列。如果在查询中返回,我该如何映射呢?
      猜你喜欢
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2015-07-05
      • 2012-06-09
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多