无法使用 Hibernate JsonBinaryType.class

问题描述

这个问题是Unable to fetch result set in Batches using ScrollableResults的扩展。

我定义了自定义方言。

public class MyPostgresql94Dialect extends Postgresql94Dialect {
public MyPostgresql94Dialect() {
    super();
    registerColumnType(Types.JAVA_OBJECT,"jsonb");
    registerHibernateType(Types.OTHER,JsonBinaryType.class.getName());
    registerColumnType(Types.OTHER,"jsonb");
}

}

执行以下代码

 @Transactional
public void getobjectUsingScrollable() {
    String statement = "select t1.*,case ratings when 1 then "success" end customColumn from table1 t1 JOIN table2 t2 ON t1.id=t2.table1Id WHERE t1.status='OPEN' ORDER BY t1.date DESC "
    StatelessSession session = ((Session) entityManager.getDelegate()).getSessionFactory().openStatelessSession();
    org.hibernate.query.Query query = session
            .createNativeQuery(statement);
    query.setFetchSize(5);
    query.setReadOnly(true);
    query.setLockMode("t1",LockMode.READ);
    query.setCacheable(false);
    ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
    while (results.next()) {
        Object obj=results.get(0);
    }
    results.close();
    session.close();
}

一个 java.lang.IllegalArgumentException: Unrecognized Type: [null] is throw for null type 。我调试了代码,并且 JsonTypeDescriptor.class 中的 jsonObjectClass 字段为空,因此

public Object fromString(String string) {
        return JacksonUtil.fromString(string,this.jsonObjectClass);
    }

尝试用 null 映射执行字符串。如何在设置方言时初始化 JsonTypeDescriptor.class 中的 jsonObjectClass 字段。

当我没有添加

registerHibernateType(Types.OTHER,JsonBinaryType.class.getName());
        registerColumnType(Types.OTHER,"jsonb");

自定义方言中,Hibernate 类型 1111 引发了异常。当我在查询添加自定义列时,将有多个列,因此 sqlresultsetmapping 到 DTO 是不可能的。我希望它返回一个 Object,我可以将其转换为地图。

更新 - 有没有一种方法可以在不使用 addScalar() 和 ResultSetMapping 的情况下做到这一点,因为列是动态的,并且系统中没有实体可以映射查询中返回的所有列。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)