Ошибка пространственного отображения ядра данных - PullRequest
1 голос
/ 04 февраля 2012

Я пытался связать пространственные типы с datanucleus.

У меня есть в базе данных поле с именем pla_location в таблице "place", которая имеет тип 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)

Но если я изменю тип Geometry, например, на String, все будет работать хорошо - но, конечно, у меня будет строка вместо Geometry:)

Означает ли это, что ядро ​​данных не поддерживает пространственное в JPA (только JDO)? Я не смог найти ни одного примера пространственного JPA в ядре данных - и это базовое отображение! Пусть кто-нибудь узнает, как решить эту проблему

Версии: ядро ядра 3.0.6 datanucleus-rdbms 3.0.6 datanucleus-api-jpa 3.0.6 datanucleus-пространственный 3.0.1

База данных mysql

С уважением

1 Ответ

1 голос
/ 06 февраля 2012

DataNucleus, очевидно, поддерживает использование пространственных типов в JDO или JPA, поскольку все «плагины» и плагины DataNucleus не зависят от API.Я могу сохранить поле «JTS» Geometry в MySQL без проблем, используя JDO или JPA.Очевидно, что JPA orm.xml не позволяет задавать расширение «no-userdata» как часть стандарта ... но вы можете определить это так:

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