我正在尝试将 Datanucleus 与 datanucleus-spatial 插件一起使用。我正在为我的映射使用注释。我正在尝试使用 PostGIS 和 Oracle 空间。我将回到 datanucleus 的教程。我所经历的没有任何意义。我的开发环境是带有 MAven 2.2.1 的 Netbeans 7.x(我尝试过 7.0、7.2 和 7.3)。使用位于http://www.datanucleus.org/products/datanucleus/jdo/guides/spatial_tutorial.html的 Datanucleus 教程中的 Position 类,我发现如果我的 Maven 依赖项中不包含 datanucleus-spatial 插件,它连接到 PostGIS 或 Oracle 没问题,并提交数据,空间数据被存储为一个 blob(我预计这是因为不存在空间插件)。使用 PostGIS,本教程工作得很好。
我通过用 oracle.spatial.geometry.JGeometry 替换 org.postgis.Point 类来修改 Position 类,并将我的连接指向 Oracle 服务器。如果没有空间,该点再次存储为 blob。使用空间我得到以下异常:
java.lang.ClassCastException:org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection
修改后的类如下所示:
@PersistenceCapable
public class Position
{
@PrimaryKey
private String name;
@Persistent
private JGeometry point;
public Position(String name, double x, double y)
{
this(name, JGeometry.createPoint(new double[]{x, y}, 2, 4326));
}
public Position(String name, JGeometry point)
{
this.name = name;
this.point = point;
}
public String getName()
{
return name;
}
public JGeometry getPoint()
{
return point;
}
@Override
public String toString()
{
return "[name] "+ name + " [point] "+point;
}
}
在美妙的 DataNucleus Spatial 世界中,我缺少什么吗?为什么添加空间时它会失败?即使我正在注释,我是否需要 JDO xml 文件?教程中是否有未提供的注释?如果需要教程中显示的 jdo xml 文件以及我收到这些错误的原因,我应该把它放在哪里?我目前在我的项目上落后 3 周,如果这不能很快解决,我将切换到 Hibernate。