Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 5:使用命名查询,无状态会话返回java.lang.UnsupportedOperationException_Hibernate_Named Query_Hibernate 5.x - Fatal编程技术网

Hibernate 5:使用命名查询,无状态会话返回java.lang.UnsupportedOperationException

Hibernate 5:使用命名查询,无状态会话返回java.lang.UnsupportedOperationException,hibernate,named-query,hibernate-5.x,Hibernate,Named Query,Hibernate 5.x,在我们将项目从Hibernate4升级到5之后,我们遇到了这样一个异常,我们试图从带有无状态会话的命名查询中获得可滚动的结果。到目前为止,我们已经尝试用谷歌搜索它并设置参数,但似乎在NamedQuery对象中默认启用了缓存,而无状态会话类在尝试在其中设置chacheMode时抛出java.lang.UnsupportedOperationException(hibernate自己的实现)。代码如下: public <T> Results<T> fetchScrollabl

在我们将项目从Hibernate4升级到5之后,我们遇到了这样一个异常,我们试图从带有无状态会话的命名查询中获得可滚动的结果。到目前为止,我们已经尝试用谷歌搜索它并设置参数,但似乎在NamedQuery对象中默认启用了缓存,而无状态会话类在尝试在其中设置chacheMode时抛出java.lang.UnsupportedOperationException(hibernate自己的实现)。代码如下:

public <T> Results<T> fetchScrollableResultsByQueryName(String queryName, List<String> paramNames, List<Object> paramValues){
        StatelessSession slsession  = getStatelessSession();
        ScrollableResults scrollableResults = createQueryByName(queryName, slsession, paramNames,  paramValues).scroll(ScrollMode.FORWARD_ONLY);
        return(new ResultsHibernateStateless<T>(scrollableResults, slsession));
    }

protected Query createQuery(String queryStr, StatelessSession slsession, List<String> paramNames, List<Object> paramValues ) {
        Query query = (Query) slsession.createQuery(queryStr);
        setQueryTimeout(query);
        query.setFetchSize(fetchSize);
        query.setReadOnly(true);
        query.setCacheMode(null);
        query.setCacheable(false);
        this.addNamedParamToQuery(query, paramNames,  paramValues);
        return query;
    }

如果有人知道这是hibernate 5中的一个已知错误,或者有解决此问题的方法???

我认为您的问题的根本原因如下:

query.setCacheMode(null);
您应该将其删除,因为如果查看,您将看到:

@Override
public void setCacheMode(CacheMode cm) {
    throw new UnsupportedOperationException();
}
另请参见中的其他信息:

无状态会话
未提供的一些功能包括:

  • 一级缓存
  • 与任何二级缓存或查询缓存的交互
  • 事务性写延迟或自动脏检查

我认为这方面问题的根本原因是:

query.setCacheMode(null);
您应该将其删除,因为如果查看,您将看到:

@Override
public void setCacheMode(CacheMode cm) {
    throw new UnsupportedOperationException();
}
另请参见中的其他信息:

无状态会话
未提供的一些功能包括:

  • 一级缓存
  • 与任何二级缓存或查询缓存的交互
  • 事务性写延迟或自动脏检查

尝试在通话前设置提示。滚动(仅限滚动模式。向前)如下所示:

setHint(JPA_共享_缓存_存储_模式,null);
setHint(JPA_共享_缓存_检索_模式,null)

尝试在通话前设置提示。按如下方式滚动(仅限ScrollMode.FORWARD_):

setHint(JPA_共享_缓存_存储_模式,null);
setHint(JPA_共享_缓存_检索_模式,null)

我们也在hibernate社区上发现了这个问题,但不确定他们是否承认这个问题或提供了任何解决方案,我们也在hibernate社区上发现了这个问题,但不确定他们是否承认这个问题或提供了任何解决方案,我尝试了这两种方法,设置了不同的值并删除了这一行,问题iscacheMode在此点之前已预初始化。因此,删除此行后您会看到什么异常。相同的异常。请提供此代码段中提到的所有方法的完整实现,如:
getStatelessSession
setQueryTimeout
addNamedParamToQuery
。或者发布允许在github上重现此问题的最小项目。我已附上此报告的hibernate问题[链接]。您可以尝试运行本期中提到的测试用例,并将看到异常。我尝试了这两种方法,设置了不同的值并删除了这一行,问题是iscacheMode在这一点之前就已经预初始化了,删除这一行后,您会看到什么异常。相同的异常。请提供此代码段中提到的所有方法的完整实现,如:
getStatelessSession
setQueryTimeout
addnamedparametoquery
。或者发布允许在github上重现此问题的最小项目。我已附上此报告的hibernate问题[链接]。您可以尝试运行本期中提到的测试用例,并将看到异常。