Я использую Hibernate Spatial версии 5.0.7.Final в качестве ORM. Иногда, когда я выполняю запрос с использованием параметра Geometry as named, я получаю следующее исключение:
org.hibernate.HibernateException: Positions are collinear in 2D
Я понимаю, что иногда мои геометрии коллинеарны, и модуль NumericalMethods
в библиотеке Geolatte
проверяет, isCounterClockwise
ли моя геометрия вызывает это исключение.
Интересно, почему он это делает, но более того, что я могу сделать, чтобы избежать этой ошибки.
Код Hibernate ниже в NumericalMethods.java проверяет только первые три координаты. В моем случае иногда эти три первые координаты коллинеарны, но четвертая сделает его действительным многоугольником. Я не могу понять, почему он не будет перебирать остальные координаты, чтобы определить, против часовой стрелки или нет.
Полная трассировка стека:
org.hibernate.HibernateException: Positions are collinear in 2D
at org.hibernate.spatial.dialect.oracle.SDOGeometryValueBinder.toNative(SDOGeometryValueBinder.java:71)
at org.hibernate.spatial.dialect.oracle.SDOGeometryValueBinder.bind(SDOGeometryValueBinder.java:52)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:257)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:252)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:52)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:627)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1944)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1897)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1875)
at org.hibernate.loader.Loader.doQuery(Loader.java:919)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
at org.hibernate.loader.Loader.doList(Loader.java:2611)
at org.hibernate.loader.Loader.doList(Loader.java:2594)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2423)
at org.hibernate.loader.Loader.list(Loader.java:2418)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)