我很少接触我管理的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")
1条答案
按热度按时间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