当前位置: 首页 > 知识库问答 >
问题:

用hibernate 5保存vividsolutions.jts.geom.Polygonal属性

寿元白
2023-03-14

我正在尝试将一个较旧的项目升级到spring/hibernate 5。我们使用com.livitSolutions.jts.geom。多边形库,用于在Oracle DB(19c)中存储形状数据。配置的hibernate方言是org.hibernate.spatial.dialogue.oracle.oracleSpatial10gDialogue

对于以前的Hibernate版本,这工作正常:

@XmlTransient
@Column(name = GEOMETRY_COLUMN_NAME)
@Type(type = "org.hibernate.spatial.GeometryType")
private Polygonal shape;

我用hibernate 5尝试了不同的类型,但我永远无法将实体刷新到数据库中。它在我们的抽象保存方法中崩溃:

    public T save(T entity) {
        Serializable pk = (Serializable) ((IdentificationInformation) entity).getPk();
        try {
               getEntityManager().persist(entity);
               getEntityManager().flush(); 
               getEntityManager().refresh(entity);
            }

堆栈跟踪:

Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3297) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3824) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:1.8.0_292]
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:345) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1362) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    ... 185 common frames omitted
Caused by: java.sql.SQLSyntaxErrorException: ORA-00932: Inkonsistente Datentypen: MDSYS.SDO_GEOMETRY erwartet, BINARY erhalten

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:910) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1119) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3865) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3845) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1061) ~[ojdbc8.jar:12.2.0.1.0]
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) ~[tomcat-dbcp.jar:9.0.38]
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) ~[tomcat-dbcp.jar:9.0.38]
    at sun.reflect.GeneratedMethodAccessor457.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_292]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_292]
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:403) ~[javamelody-core-1.53.0.jar:1.53.0]
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:128) ~[javamelody-core-1.53.0.jar:1.53.0]
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:285) ~[javamelody-core-1.53.0.jar:1.53.0]
    at com.sun.proxy.$Proxy177.executeUpdate(Unknown Source) ~[na:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
    ... 196 common frames omitted
Caused by: oracle.jdbc.OracleDatabaseException: ORA-00932: Inkonsistente Datentypen: MDSYS.SDO_GEOMETRY erwartet, BINARY erhalten

为德国人道歉。最后一行意味着不一致的数据类型MDSYS。需要SDO_GEOMETRY,收到二进制。

有没有办法让这个工作?它不应该包括另一个库而不是生动的解决方案,因为这是我们得到的形状格式。

共有1个答案

席兴平
2023-03-14

好的,我终于找到了原因。感谢@Paulito.Bandito.的这篇文章显然,hibernate空间和hibernate公共注释的版本需要相同才能持久化生动的解决方案对象(在我的例子中5.1.2.Final)。

我还必须将实体更改为:

@XmlTransient
@Column(name = "SHAPE")
private MultiPolygon shape;
 类似资料:
  • 问题内容: 有谁知道为什么存储属性文件时冒号会转义? 我正在这样做: 并使用存储: 它正在工作,但是输出由于某些原因冒号已转义: 有人知道解决方法吗? 问题答案: 在属性文件中,这两个都是合法的: 因此=和:必须都转义。 现在,如果您用Properties读回了东西,那没问题。否则,您将必须编写自定义代码

  • 问题内容: 我正在检查对象属性是否存在,该变量包含一个持有问题的属性名称。 这是因为它正在寻找但我要它检查 问题答案: 要么 要么 请注意,它不会检查继承的属性,而会。例如,是正确的,但事实并非如此。

  • 问题内容: 我正在使用Firebase和angular进行测验。在测验的最后,我想使用以下代码将新属性保存到users对象: 它可以工作,但也可以覆盖用户对象的所有属性。因此,该对象曾经像名称,用户名,电子邮件,密码等一样保存,但是当我按下topscore时,它成为该对象的唯一属性。为什么? 问题答案: 你为什么在这里使用?仅在将其三向绑定到Angular视图时才有用。如果您使用的是常规JavaS

  • 我有一个mongoose对象模式,看起来类似于以下内容: 我试图创建一个新的职位使用以下内容: 但是,一旦我保存了文章,它就会被创建为带有images属性的空数组。我做错了什么?

  • 假设你有一个网站, example.com 上面有一些图像的大小被调整到了非常低的质量。当您单击图像时,将转到“查看图像”页面,例如:。 例如:com/view?image=image_related_temp_code 在此页面上,图像以全质量加载。但是,如果您通过Chrome Dev控制台检查其< code>src属性以下载/浏览< code>src链接,您会得到另一个图像,显示为文本返回,这