问题描述
这个问题是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 (将#修改为@)