我试图将空间类型与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>
...
In place 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)
但是如果我将Geometry类型更改为例如String,那么一切都运行良好 - 但是,当然我会使用字符串而不是Geometry:)
这是否意味着数据核不支持JPA中的空间(仅限JDO)? 我在数据核心中找不到任何JPA空间的例子 - 这是一个基本的映射! 愿有人知道如何解决这个问题
版本: datanucleus-core 3.0.6 datanucleus-rdbms 3.0.6 datanucleus-api-jpa 3.0.6 datanucleus-spatial 3.0.1
数据库mysql
祝你好运
答案 0 :(得分:1)
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>