【问题标题】:org.hibernate.MappingException: No Dialect mapping for JDBC type: 2002org.hibernate.MappingException:没有 JDBC 类型的方言映射:2002
【发布时间】:2010-06-15 10:14:11
【问题描述】:

当我尝试执行 JPA nativeQuery 以获取几何字段类型时,我收到了 org.hibernate.MappingException: No Dialect mapping for JDBC type: 2002

我正在使用 Oracle 和 org.hibernatespatial.oracle.OracleSpatial10gDialect

几何字段映射为:

@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());

这是我在 spring+struts2 上的休眠配置

<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>

如何解决?或者如何强制几何类型使其正常工作?

【问题讨论】:

    标签: java oracle hibernate spatial


    【解决方案1】:

    您能否尝试使用以下映射定义:

    @Column(name = "geometry", columnDefinition="Geometry", nullable = true) 
    private Geometry geometry;
    

    代替:

    @Column(name="geometry")  
    @Type(type = "org.hibernatespatial.GeometryUserType")  
    private Geometry geometry;
    

    【讨论】:

      【解决方案2】:

      问题不在于您的查询或映射,而在于您的 Hibernate 配置。您会发现为要使用的 SQL 方言名称指定了错误的字符串。建议您发布您正在使用的 Hibernate 配置文件。

      【讨论】:

      • 感谢您的宝贵时间,我已经编辑了我的帖子以显示我的 jpa 配置。当我使用 Hql 查询时,我的项目运行良好,例如:Geometries result = null; result = (Geometries) entityManager.createQuery("SELECT geo FROM Geometries geo WHERE geo.id = ?1") .setParameter(1, id).getSingleResult();
      【解决方案3】:

      感谢您的回复,

      我解决了使用 namedQuery 检索具有所有字段的整个对象,以及他的类型几何。

      非常感谢

      【讨论】:

        【解决方案4】:

        使用全文搜索时收到相同的错误消息,这对我有帮助:

        在 PgAdmin 中安装以下扩展:unaccent; (对于 Postgres 用户 - 底部有一个示例)

        键入:CREATE EXTENSION unaccent;,扩展程序已创建/安装,现在可供该数据库的用户使用。

        请注意,这也应该安装在您的应用程序所在的服务器上。

        接下来的步骤是什么:

        • 创建自定义方言(以便识别和阅读语法)
        • 在您的 application.properties 文件中添加该自定义方言。

        例子来了:

        我使用 Spring Boot 2.0 和 Postgres 作为数据库:

        安装扩展后,我们创建以下类:PgFullTextFunctionPostgreSQL82Dialect 文章中描述: http://www.welinux.cl/wordpress/implementing-postgresql-full-text-with-jpa-entities/

        你也可以试试这个: https://www.zymr.com/postgresql-full-text-searchfts-hibernate/

        但我使用的是第一个示例,它正在工作,我刚刚删除了 以下行: value = org.apache.commons.lang3.StringUtils.stripAccents(value); 来自PgFullTextFunction 类。

        一般来说,据我了解,我们创建一个实现 SQL 函数接口的类,这样我们就创建了一个新的方言。注册在PgFullTextDialect 类中的fts() 就像我们的PgFullTextFunction 类中的render 方法的包装器。

        然后在我们的application.properties 文件/文件中添加新创建的方言的路径:

        spring.jpa.properties.hibernate.dialect=com.your.package.name.persistence.PgFullTextDialect
        

        如果你想为你的全文功能使用特定的配置,你可以查看我在上面 zymr.com 发布的第二个链接,那里的示例带有额外的语言配置。

        我希望这会有所帮助!

        【讨论】:

          【解决方案5】:

          您的查询:

          Query query = entityManager.createNativeQuery("Query String");
          

          您忘记添加实体类参数。

          你应该添加实体类参数。

          例如:

          Query query = entityManager.createNativeQuery("Query String", EntityName.class);
          

          【讨论】:

            猜你喜欢
            • 2012-02-09
            • 2012-06-17
            • 2018-04-08
            • 2014-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-07
            相关资源
            最近更新 更多