[英]How to use Hibernate stored procedure with setResultTransformer and scalar
[英]How to use `setResultTransformer` after Hibernate 5.2?
我想使用query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
來獲取List<Map>
。 但我有一個例外:
java.lang.NoSuchMethodError: org.hibernate.query.Query.setResultTransformer(Lorg/hibernate/transform/ResultTransformer;)Lorg/hibernate/Query;
我找不到org.hibernate.query.Query
的實現類。 方法setResultTransformer
在org.hibernate.Query
。
為什么不推薦使用 org.hibernate.Query?
ResultTransformer 帶有不遵循功能接口語法的遺留定義。 因此,我們不能在這個例子中使用 lambda。 Hibernate 6.0 旨在克服這個問題,這就是 Hibernate ORM 5.2 ResultTransformer 被棄用的原因。 然而,將提供替代方案,因此我們在本文中討論的概念即使在 Hibernate 6 中也將保持不變。
Hibernate 6 尚未發布。 然而,基於這個問題, ResultTransformer 接口被拆分為 2 個功能接口:TupleTransformer 和 ResultListTransformer。
不要使用session.createQuery(hql,transformerClass);
如果您在查詢中選擇多個項目,請改用舊的已棄用方法。
https://thorben-janssen.com/hibernate-resulttransformer/參考這個 query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
由於 Hibernate 5.2 使用 Java 8,您可以使用流 api
List<EmployeeDto> resultList = session
.createQuery(" from Employee", Employee.class)
.stream()
.map((employee) -> {
return new EmployeeDto(employee);
})
.collect(Collectors.toList());
此代碼還將提供一些性能改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.