映射Hibernate中的计算字段

时间:2009-10-20 13:41:25

标签: java oracle hibernate orm spatial

我不确定这在Hibernate中是否可行,但如果它真的很棒:)我实际上并没有超越概念阶段,但我会尽可能地解释。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

这应该映射属性,而不是在您尝试从数据库中保存时抛出错误。

请注意,正确的注释是可更新的(不可更新,因为它最初发布)

答案 1 :(得分:1)

您是否看过Hibernate Spatial及其Oracle10g/11g Provider

  

Hibernate Spatial是一个通用的   扩展到Hibernate进行处理   地理数据。 Hibernate Spatial是   开源和许可,像   Hibernate,根据LGPL许可证。

     

Hibernate Spatial允许您处理   地理数据标准化   办法。它抽象远离   数据库支持的特定方式   地理数据,并提供了一个   标准化的跨数据库界面   到地理数据存储和查询   功能

     

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