java - 映射异常 : No Dialect mapping for JDBC type: 2002

标签 java sql hibernate postgresql hql

我尝试通过 Hibernate 原生 sql 接口(interface)查询 PostgreSQL 数据库。但是我收到 org.hibernate.MappingException: No Dialect mapping for JDBC type: 2002

SQL 查询相当复杂,但通过(例如)pgAdmin 可以正常工作。有谁知道问题出在哪里?

WebpageDaoImpl.java

    public PageDto search(final String term, final Long parentNodeId, final String localeCode){
        hqlQuery =  sessionFactory.getCurrentSession().createSQLQuery(buildSearchQuery(false));                 
        hqlQuery.setCacheable(false);
        hqlQuery.setString("locale", localeCode);
        hqlQuery.setString("query", term);
        hqlQuery.setString("fullTextQuery", term.replace(" ", "&"));
        hqlQuery.setLong("nodeId", parentNodeId);
        items.setItems(hqlQuery.list());
    }

  private String buildSearchQuery(){
    StringBuilder sql = new StringBuilder();
    sql.append("with recursive tmp_webpage(id, parent) as ( ")
   .append("    values(cast(-1 as bigint), cast(:nodeId as bigint)) ")
   .append(" union all ")
   .append("    select w.id, w.parent_id ")
   .append("    from tmp_webpage as tw, webpage as w ")
   .append("    where w.id = parent ")
   .append(" ) ")
   .append("SELECT w FROM webpage w ")
   .append("    inner join webpage_content wc ON w.id=wc.webpage_id ")
   .append("WHERE wc.localized_key= :locale AND w.enabled=true (")
   .append("    unaccent(lower(wc.title)) like CONCAT('%', unaccent(lower(:query)) , '%') OR ")
   .append("    wc.webpage_tsvector @@ to_tsquery( cast( wc.localized_key as regconfig), :fullTextQuery) ) ");
   .append("GROUP BY w.id, wc.webpage_tsvector, wc.localized_key ")
   .append("ORDER BY ts_rank(wc.webpage_tsvector, to_tsquery(cast( wc.localized_key as regconfig), :fullTextQuery )) DESC");
   return sql.toString();
}

网页.java

public class Webpage{

    private Long id;
    private Webpage parent;
    private Set<Webpage> childrens;
    // ...

    @ElementCollection
    @CollectionTable(name = "webpage_content")
    @MapKeyJoinColumn(name = "locale")
    private Map<String, WebpageContent> localized;

    //...
}

网页内容.java

@Embeddable
public class WebpageContent {

    private String name;
    private String title;
    private String description;
    private String content;
    //...
}

注意:表webpage多了一个显式创建的列webpage_tsvector,其中保存的是全文 vector 。

最佳答案

我用 .addEntity(Webpage.class)
解决了给定的问题 :

hqlQuery =  sessionFactory
            .getCurrentSession()
            .createSQLQuery(buildSearchQuery())
            .addEntity(Webpage.class);

关于java - 映射异常 : No Dialect mapping for JDBC type: 2002,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23741247/

相关文章:

hibernate - 在一对多 Hibernate 映射中使用部分复合键

Java字符串格式: "%0" and "d%s"

java - Spring MVC项目无法使用Hibernate

php - 为什么我无法正确回显所有变量?

mysql - 我如何计算sql中零的数量?

java - 具有标准的独特功能

java - 解析包含 XML 的字符串后,XML 文档为 null

java - 非法参数异常

sql - 获取sql查询中的百分比

java - Hibernate 4 复合 id NonUniqueObjectException