Java org.hibernate.MappingException:没有JDBC类型的方言映射:2002
当我尝试执行JPA nativeQuery以获取几何字段类型时,我得到了Java org.hibernate.MappingException:没有JDBC类型的方言映射:2002,java,oracle,hibernate,spatial,Java,Oracle,Hibernate,Spatial,当我尝试执行JPA nativeQuery以获取几何字段类型时,我得到了org.hibernate.MappingException:没有JDBC类型的方言映射:2002 我正在使用Oracle和org.hibernatespatial.Oracle.oraclespatial10gDialante 几何体字段映射为: @Column(name="geometry") @Type(type = "org.hibernatespatial.GeometryUserType") privat
org.hibernate.MappingException:没有JDBC类型的方言映射:2002
我正在使用Oracle和org.hibernatespatial.Oracle.oraclespatial10gDialante
几何体字段映射为:
@Column(name="geometry")
@Type(type = "org.hibernatespatial.GeometryUserType")
private Geometry geometry;
// ...
List<Object> listFeatures = new LinkedList<Object>();
Query query = entityManager.createNativeQuery(
"SELECT "+ slots +" , geometry FROM edtem_features feature, edtem_dades dada WHERE" +
" feature."+ tematic.getIdGeomField() +" = dada."+ tematic.getIdDataField()+
" AND dada.capesid= "+ tematic.getCapa().getId() +
" AND feature.geometriesid= "+ tematic.getGeometria().getId());
listFeatures.addAll(query.getResultList());
@列(name=“geometry”)
@类型(Type=“org.hibernatespatial.GeometryUserType”)
私人几何;
// ...
List listFeatures=新建LinkedList();
Query Query=entityManager.createNativeQuery(
选择“+插槽+”,从edtem_特征中选择几何图形,edtem_数据,其中+
“特征。”+tematic.getIdGeomField()+“=dada。”+tematic.getIdDataField()+
“和dada.capesid=“+tematic.getCapa().getId())+
“和feature.geometriesid=“+tematic.getGeometria().getId());
addAll(query.getResultList());
这是我在spring+struts2上的hibernate配置
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernatespatial.oracle.OracleSpatial10gDialect" />
<property name="showSql" value="true" />
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernatespatial.oracle.OracleSpatial10gDialect</prop>
<prop key="hibernate.default_schema">my_schema</prop>
</props>
</property>
</bean>
org.hibernatespatial.oracle.oraclespatial
我的思维模式
如何解决这个问题?或者如何强制几何体类型使其工作?问题不在于查询或映射,而在于Hibernate配置。您会发现为要使用的SQL方言的名称指定了错误的字符串。建议您发布正在使用的Hibernate配置文件。您是否可以尝试使用以下映射定义:
@Column(name = "geometry", columnDefinition="Geometry", nullable = true)
private Geometry geometry;
而不是:
@Column(name="geometry")
@Type(type = "org.hibernatespatial.GeometryUserType")
private Geometry geometry;
谢谢你的回复 我使用namedQuery来检索一个包含所有字段的完整对象,并使用他的类型几何体来解决这个问题
非常感谢在使用全文搜索时收到相同的错误消息,以下是对我的帮助: 在PgAdmin中安装以下扩展:uncent;(对于Postgres用户-底部有一个示例) 类型:
CREATE-EXTENSION-uncent
并创建/安装了扩展,现在该数据库的用户可以使用该扩展
请注意,这应该安装在应用程序所在的服务器上
接下来的步骤是什么:
- 创建自定义方言(以便识别和阅读语法)
- 在application.properties文件中添加该自定义方言
PgFullTextFunction
和文章中描述的postgresql82dial
:
你也可以试试这个:
但是我使用了第一个类的例子,它是有效的,我只是删除了
以下一行:
value=org.apache.commons.lang3.StringUtils.stripeAccents(value)
;
从PgFullTextFunction
类
一般来说,据我所知,我们创建了一个实现SQL函数接口的类,这样我们就创建了一个新的方言。类中注册的pgfulltextdialine
中的fts()
,就像我们的PgFullTextFunction
类中呈现方法的包装器
之后,在我们的application.properties
file/files中,我们将路径添加到新创建的方言:
spring.jpa.properties.hibernate.dialect=com.your.package.name.persistence.PgFullTextDialect
如果您想为全文函数使用特定的配置,可以查看我在上面zymr.com上发布的第二个链接,这里的示例是附加语言配置
我希望这能有所帮助 您的查询:
Query query = entityManager.createNativeQuery("Query String");
您忘记添加实体类参数
您应该添加实体类参数
例如:
Query query = entityManager.createNativeQuery("Query String", EntityName.class);
谢谢你的时间,我已经编辑了我的帖子来显示我的jpa配置。当我使用Hql查询时,我的项目运行良好,如:geometrics result=null;结果=(几何图形)entityManager.createQuery(“从几何图形中选择几何图形,其中geo.id=?1”).setParameter(1,id).getSingleResult();