java - 数据核空间映射误差

标签 java jpa gis spatial datanucleus

我试图将空间类型与数据核连接起来。

我在“place”表中有一个名为 pla_location 的数据库字段,它是 mysql GEOMETRY 类型

我做了如下映射:

<entity class="com.dn.dntest.model.Place">
<table name="place" schema="map"/>
    <attributes>
    ...
    <basic name="plaLocation">
        <column name="pla_location" />
    </basic>            
    ...

就地java对象我有:

import com.vividsolutions.jts.geom.Geometry;

public class Place implements java.io.Serializable {
...
private Geometry plaLocation;

...
(getters and setters)
...

现在我通过“查询”询问数据库

Query q = em.createQuery("select a FROM com.dn.dntest.model.Place as a");
List results = q.getResultList();

结果是

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'P.PLALOCATION' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
at org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)

但是,如果我将几何类型更改为字符串,一切都会正常 - 但是,当然我将使用字符串而不是几何:)

这是否意味着数据核不支持 JPA 中的空间(仅 JDO)? 我在数据核中找不到 JPA 空间的任何示例 - 这是一个基本映射! 希望有人知道如何解决这个问题

版本: 数据核核心 3.0.6 datanucleus-rdbms 3.0.6 datanucleus-api-jpa 3.0.6 数据核空间 3.0.1

数据库mysql

致以诚挚的问候

最佳答案

DataNucleus 显然支持在 JDO 或 JPA 上使用空间类型,因为 DataNucleus“核心”和存储插件都是独立于 API 的。我可以使用 JDO 或 JPA 将“JTS”几何字段持久保存到 MySQL,没有任何问题。显然,JPA orm.xml 不允许将“no-userdata”扩展规范作为标准的一部分......但您可以这样定义

<basic name="geom">
    <extension vendor-name="datanucleus" key="mapping" value="no-userdata"/>
</basic>

关于java - 数据核空间映射误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143925/

相关文章:

ruby-on-rails - 使用 PostGIS 和 Rails 查找边界框内的所有项目

java - 我想以列或列表的形式打印枚举器数据

java - 在没有版本注释或 OptimisticLocking 策略的情况下获取 ObjectOptimisticLockingFailureException

java - 实体 JPA 中的 session 范围属性

java - 使用 Spring JPA 保存新数据 - Angular 8

从草地 gis 导出多个栅格

.net - NHibernate.Spatial是否与NHibernate 3.0兼容?

java - 如何将 windows 批处理文件转换为 mac sh 文件?

java - 实现 do while 和 exit

java - 无界通配符类型 List<?> 和原始类型 List 有什么区别?