升级到Hibernate 5.4.3后为空指针

xcitsw88  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(118)

我很少接触我管理的Web应用程序的HibernateCrudServiceDAO类--它总是正常工作。在从Hibernate 5.1.0升级到5.4.3之后,这种情况发生了变化。
IntelliJ正确标记了一个不推荐的Hibernate类和方法:org.hibernate.Query和org.hibernate.query.Query.setFlushMode()。我将它们分别更改为org.hibernate.query.Query和setHibernateFlushMode()。但是,下面的方法现在正在生成空指针异常。
从5.1.0开始,Hibernate的“引擎盖下”似乎发生了一些变化,现在可能需要在我的HibernateCrudServiceDAO类中进行一些变化来适应这一点。
您的帮助和见解将不胜感激。

**HibernateCrudServiceDAO method** 

    @SuppressWarnings("unchecked")
    public <T> T findUniqueWithNamedQuery(String queryName, Map<String, Object> params){
        Set<Entry<String, Object>> rawParameters = params.entrySet();
        Query query = session.getNamedQuery(queryName); 

        for(Entry<String, Object> entry : rawParameters){
            query.setParameter(entry.getKey(), entry.getValue());
        } 

        return (T) query.setHibernateFlushMode(FlushMode.MANUAL).uniqueResult();
    }

**Line which calls the above** 

    User user = crudService.findUniqueWithNamedQuery(User.BY_CREDENTIALS, QueryParameters.with("userName", userName).and("password", digest).parameters());

**The named query** 

    @NamedQuery(name = User.BY_CREDENTIALS, query = "Select u from User as u where u.userName = :userName and u.password = :password")
dgjrabp2

dgjrabp21#

经过进一步调查,发现问题出在ApacheTapestry的tapestry-hibernate模块中。显然,Hibernate 5.2中发生的更改破坏了tapestry-hibernate中的某些内容,导致某些方法返回null Query对象。
修复此模块之前的解决方法:将受影响的方法调用从session.blah()更改为session.getSession().blah()。
Tapestry门票:https://issues.apache.org/jira/browse/TAP5-2754

相关问题