Ошибка сопоставления в столбце геометрии Hibernate Spatial 5.0.4.Final и PostgreSQL

Я хочу связать столбец PostgreSQL ("b_shp") типа "геометрия". В частности, следующий запрос дает результат "POLYGON":

SELECT GeometryType(b_shp)   ==>  "POLYGON"

Я не могу найти правильную аннотацию для @Column "b_shp" в моем @Entity.

Я пробовал эти аннотации:

@Column(name="b_shp", columnDefinition="geometry(MultiPolygon,4326)")   
private com.vividsolutions.jts.geom.MultiPolygon b_shp;

и:

@Column(name="b_shp", columnDefinition="geometry")  
private com.vividsolutions.jts.geom.Geometry b_shp;

получение этой ошибки:

ERROR:
javax.ejb.EJBException: java.lang.IllegalStateException: Received object of type org.postgresql.util.PGobject

Я использую:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.4.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-spatial</artifactId>
            <version>5.0.4.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.4.Final</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1205-jdbc42</version>
        </dependency>

        <dependency>
            <groupId>org.postgis</groupId>
            <artifactId>postgis-jdbc</artifactId>
            <version>1.3.3</version>
        </dependency>

Какая правильная аннотация?


person S. De Finis    schedule 30.11.2015    source источник
comment
То же самое. Удалось ли вам решить эту проблему? Большое спасибо, Тоастор   -  person Toastor    schedule 20.03.2016


Ответы (1)


Я считаю, что это не проблема с вашей аннотацией. Я столкнулся с той же ошибкой и смог решить ее, не используя источник данных, предоставленный моей wildfly, и вместо этого подключился к базе данных следующим образом (persistence.xml):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
         <exclusions>
            <module name="org.hibernate" />
            <module name="org.postgresql" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
1.xsd"> <persistence-unit name="org.hibernate.events.jpa" transaction-type="JTA"> <properties> <property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/yourdatabase"/> <property name="hibernate.connection.username" value="username"/> <property name="hibernate.connection.password" value="password"/> <property name="hibernate.connection.pool_size" value="5"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.max_fetch_depth" value="5"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit>

Also, because the early 5.0.x versions of hibernate apparently have no proper integration of hibernate-spatial and to avoid classpath problems, I added the file jboss-deployment-structure.xml to my META-INF:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
         <exclusions>
            <module name="org.hibernate" />
            <module name="org.postgresql" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

Это предотвратит использование спящего режима, предоставленного wildfly, в вашем развертывании, поэтому вместо этого вы можете добавить зависимость для самой последней версии спящего режима (5.1.0 на момент написания этой статьи). Затем вам нужно будет добавить зависимости для hibernate, hibernate-spatial и postgresql-jdbc.

Также обратите внимание, что hibernate 5 больше не требует аннотации @Type.

Мне удалось заставить мой проект работать с указанными выше настройками и одним из моих объектов со следующим атрибутом/столбцом:

@Column(columnDefinition = "geometry(Point,4326)")
private Point position;

Надеюсь поможет, удачи!

Изменить:

Я подготовил рабочий образец проекта, демонстрирующий использование wf10/hibernate5/postgis — проверьте его на github:

https://github.com/Pulvertoastmann/wf10postgis/

person Toastor    schedule 23.03.2016
comment
Это спасает мой день. Я искал вокруг в течение нескольких дней. Это должно быть помечено как принятый ответ. - person dominic; 17.03.2017
comment
Рад, что это помогло! С уважением, Тоастор - person Toastor; 19.03.2017