没有 JDBC 类型的方言映射:1111(本机查询)

Posted

技术标签:

【中文标题】没有 JDBC 类型的方言映射:1111(本机查询)【英文标题】:No Dialect mapping for JDBC type: 1111 (Native Query) 【发布时间】:2018-03-08 14:15:57 【问题描述】:

我在query.getResultList() 遇到了标题错误;在运行本机查询以返回 json 对象时在 JsonbHibernateExampleApplicationTests 类文件上。

返回非json类型的列没有问题。

请提供帮助,如果需要更多信息,请告诉我。

以下是源码

public class JsonbHibernateExampleApplicationTests 

    @Autowired
    private PersonRepository repository;

    @Autowired
    private ApplicationContext appContext;

    @Test
    public void contextLoads() 
        EntityManagerFactory entityManagerFactory = (EntityManagerFactory) appContext
                .getBean("entityManagerFactory");

        EntityManager entityManager = entityManagerFactory.createEntityManager();

        String sql = "select additional_data  from person";

        javax.persistence.Query query = entityManager.createNativeQuery(sql);
        query.getResultList();
        //List<JsonDataUserType> list = (List<JsonDataUserType>) query.getResultList();
        /* System.out.println("list:" + list);
        for (JsonDataUserType json: list)
        
            System.out.println("json:" + json);
        */
        //List<Object[]> objects = query.getResultList();
        //System.out.println("result:"+ objects);

    


我在实体中将附加数据列指定为自定义 json 类型

@Type(type = "JsonDataUserType")
private Map<String, String> additionalData;

这里无法粘贴所有源代码,您可以在http://vojtechruzicka.com/postgresqls-jsonb-type-mapping-using-hibernate/查看完整源代码

我只是将原始源代码修改为上面的 URL 以运行原生 SQL 查询。

非常感谢,

【问题讨论】:

No Dialect mapping for JDBC type: 1111的可能重复 请同时发布您的“entityManagerFactory”bean。 嗨 Fab,我已经检查过了,发现问题是非 json 格式,我不能将 json 自定义类型作为 UUID。见下面@Type(type = "JsonDataUserType") private Map additionalData; 嗨 Punit,entityManagerFactory 来自 JDK 8 源代码 javax.persistence.EntityManagerFactory 大家好,我找到了一个替代解决方案,我将 additional_data json 数据转换为文本,然后能够获得输出。请参阅下面的代码如果你们有更好的解决方案,请告诉我。可能是 POJO 映射。 String sql = "select CAST(additional_data AS text) from person"; javax.persistence.Query 查询 = entityManager.createNativeQuery(sql);列表 列表 = query.getResultList(); System.out.println("list:" + list); System.out.println("list 0:" + list.get(0)); 【参考方案1】:

我找到了替代解决方案。我将additional_data json 数据转换为文本。 然后我就可以得到输出了。 请参阅下面的代码。

如果你们有更好的解决方案,请告诉我。可能是 POJO 映射。

String sql = "select CAST(additional_data AS text) from person"; 
javax.persistence.Query query = entityManager.createNativeQuery(sql); 
List list = query.getResultList(); System.out.println("list:" + list); 
System.out.println("list 0:" + list.get(0))

【讨论】:

以上是关于没有 JDBC 类型的方言映射:1111(本机查询)的主要内容,如果未能解决你的问题,请参考以下文章

JPA SQL Server 没有 JDBC 类型的方言映射:-9

JPA javax.persistence.PersistenceException:org.hibernate.MappingException:没有 JDBC 类型的方言映射:-101

没有 JDBC 类型的方言映射:-101

Spring Hibernate:没有 JDBC 类型的方言映射:-101

Hibernate 3.2 中没有 LONGVARCHAR 的映射

Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)